Tips and tricks on building a call list

My end goal is to build a call list of people I would like to stay in touch with at given intervals. With this post I would like to get some tips and tricks on whether someone has done anything similar, and how they did it. I’m not asking for you to write my entire query(/script), I’m just wanting your input on the way forward, and whether you’ve got any suggestion which would make the task easier.

The base data I’m wanting to use is different tasks scattered around in my daily notes which lists when I last completed a call to a given person. In addition I’m thinking about putting a callFrequency within each persons metadata, and then I’m aiming to build a script which scans these tasks, checks the days since I called that person. If above the callFrequency make a task to call them, and if above twice the frequency, make an important task to call them.

Some sample calls (which will be scattered around in various notes):

The base task collection, before any processing:

My phone task decoration setup

In case you’re wondering how I got my task decorated, it’s based upon an idea from the Minimal theme on Checklists, where I’ve added some custom icons found at remixicon.com, where I found an icon, selected it and copied the Copy SVG > DataURL part into my CSS file.

Here is the specific example for just the phone decoration, which is stored in vault/.obsidian/extraTaskDecoration.css. And after storage, I’ve enabled this particular CSS file in Obsidian settings > Appearance (at the bottom) > extraTaskDecoration.

input[data-task="T"]:checked,
li[data-task="T"] > input:checked,
li[data-task="T"] > p > input:checked
{
  --checkbox-marker-color: transparent;
  border: none;
  border-radius: 0;
  background-image: none;
  background-color: currentColor;
  color: var(--color-green);
  -webkit-mask-size: var(--checkbox-icon);
  -webkit-mask-position: 50% 50%;
}

/* T - Telephone - remixicon: phone-fill */
input[data-task="T"]:checked,
li[data-task="T"] > input:checked,
li[data-task="T"] > p > input:checked {
  -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='none' d='M0 0h24v24H0z'/%3E%3Cpath d='M21 16.42v3.536a1 1 0 0 1-.93.998c-.437.03-.794.046-1.07.046-8.837 0-16-7.163-16-16 0-.276.015-.633.046-1.07A1 1 0 0 1 4.044 3H7.58a.5.5 0 0 1 .498.45c.023.23.044.413.064.552A13.901 13.901 0 0 0 9.35 8.003c.095.2.033.439-.147.567l-2.158 1.542a13.047 13.047 0 0 0 6.844 6.844l1.54-2.154a.462.462 0 0 1 .573-.149 13.901 13.901 0 0 0 4 1.205c.139.02.322.042.55.064a.5.5 0 0 1 .449.498z'/%3E%3C/svg%3E");
}

So this is my base point, and if you got some ideas or thoughts on similar queries or the way forward, I would appreciate it!

You might be able to use the Incremental Writing plug-in to set up a “call this person every so often” type of workflow.

There is also the Random Notes plugin that can pull a random note from a search result (e.g. search your entries and then pull random person to call).

Finally, I didn’t know you could do ‘status = “T”’. Now I have to go in and mess with my task workflow. :slight_smile:

I’m not sure if I understand the goal…
But considering your tasks examples, you have a link (tasks outlinks) to the person and a completion date in each task. With these metadata:

  • I imagine a query (only in dvjs, I guess) that list only the last task for each linked person;
  • in each person note you have a duration field for callFrequency
  • with the completion date in the task and the date(today) you can calculate the duration and compare to the value defined in callFrequency (going through the outlink in the task and target the outlink.callFrequency)
  • then, with task.visual define a colored extra element to call your attention to the priority/urgency of a new call (something like in the next image:

This is not a way to “create” a new task, just a way to signalize graphically the urgency of a new call.

It looks like you’re using the Tasks plugin. I do too, and I use its recurring feature for tasks like this.

For example, let’s say I wanted to call my mom about once a week, but it doesn’t have to be on any particular date. I could set up a task like this, with a repeat schedule and a start date:

  • [ ] Call Mom :repeat: every week when done :flight_departure: 2022-12-09

The “start” date ensures that the task doesn’t show up on my lists until a certain date, but it’s not due on that date. After I call my mom, I can check off the task and it won’t reappear until a week later:

Brilliantly summarised. My thought process is like you described, but the crux of it all is in the quoted sentence: This is not a way to create task. I’m therefore considering the possibility to do my query within a call to creating my daily notes, or whether I should just use it on my Running tasks note, which collates other tasks around my vault, and make dynamic task to create the call task manually.

Just typing that last sentence out, make me cringe a little bit, as it’s not the way to do it…

Actually I’m not using the Tasks plugin, I’ve mainly been using Dataview, and the completion date comes from that plugin. I’ve seen references to the Tasks plugin here and there in the forums, but I’ve not actually considered using it. Partly because it seems to have too many bells and whistles too my liking, and partly because it seems to be closely linked to the English language, and my vault is mostly in my native language of Norwegian.

With that being said, recurring tasks like the one you defined there, is indeed what I’m aiming to do. Do you know how the Tasks plugin creates the new task? Does it just append it to wherever the original task was created?

And yes, I’ll take another look on that plugin, and see whether it’s a way for me to handle this workflow.

I read a little on the Incremental Writing plugin, and couldn’t quite grasp how that’s usable in my scenario. Doing a random search of people to call, could be interesting, and is worth some thinking, but I’m currently aiming for a little more direct approach on calling those I setup for frequently calling.

Lastly, I’m really enjoying doing task decorations, and the possibilities it gives me to do digital bullet journalling, and summarising afterwards, so my daily notes nowadays are a splendid mix of decorated tasks with more explanations in between in normal paragraphs. Which all lead up to nice summaries in my montly notes.

oh… I didn’t capture the core of your goal: create a new task. sorry.
But about that, once you’re a good coder, you can write a js code to make all durations relations and produce the wanted task(s) in dvjs and fixed at real via dv.markdown and templater.

I don’t have the ability to give you a specific example, but I use a more generic one. This is a Templater note (I’m not versed in templater) used to place “as real” the results defined in the query:

<%*
//the dv query
const query = `TASK
FROM "folder/subfolder"
WHERE !completed`

// get the results from the query above
let DQL = await DataviewAPI.tryQuery(query);

//the task list
const myTasks = DataviewAPI.markdownTaskList(DQL.values)
-%>
<% myTasks %>

Maybe you can build a nice query to produce the wanted task when necessary. Then, you can run the templater in your daily note and each time it have results to produce it place the “real” task in your note.

Ah, I see. I saw the completion icon and assumed you were using Tasks. Thanks for the correction.

I understand your hesitation to use Tasks because of its complexity. I had the same reaction, and used only Dataview for a while. However, with Dataview I had to remember to update recurring tasks manually, which was tedious and error-prone. This led me to take a second look at Tasks, and for me it handles recurring tasks very well.

I’ve found that Dataview and Tasks work well together, especially because Dataview understands many of Tasks’s data fields out of the box.

Yes, as you can see from my screenshot above, when you complete a task the plugin will append the completion date to it and then generate a new task with a new date directly above it. (It may sound a little odd when described like that, but it made sense to me when I saw it in action.)

In addition to start date, Tasks supports scheduled dates, due dates, and other metadata. They’re all optional of course – I mostly use due dates and scheduled dates myself.

Don’t be sorry, actually I didn’t think of the issue with the dataview query being dynamic, and as such not the “correct” place to create a new task. So you did help me to focus on what I’m really trying to get done, and the complications thereof.

It seems like this I the route I need to take, but I just thought of another complication, and that is if in my daily notes templates, before I create a new task I need to check that I didn’t create the same task another day.

Hmm… I really need to think this through.

yes, it’s an issue. in the case maybe your code need to produce a new task based in a date placed in the task. If in the created task you add a due date or similar, that value becomes the reference to compare with the frequency… (well, I guess this is a confusing thing :slight_smile: You’ll think in something better)

I read up a little on the Tasks plugin, and it does seem to be a great way of handling recurring tasks. My two main issues against it though are:

  1. It requires tasks to be in English, not Norwegian
  2. The recurring tasks occur in the original task definition. I’m kind of wanting to have them in my daily notes, with the new task in another note. I guess I could possibly work around this with defining the task in each persons note instead.

Hmm… Maybe they always should be defined in the persons note? That way it would be easier to see the call history, and check for whether I’ve defined the task already or not. But then again, I would then need to either switch to English, or find a way to change the note using some query.

This topic was automatically closed 90 days after the last reply. New replies are no longer allowed.