No internet connection
  1. Home
  2. Ideas

Can Ghost authors receive notifications when a comment is created on a post?

By Adam Bertram @adbertram
    2019-08-13 17:57:14.124Z

    I have integrated TalkYard in my Ghost blog. So far, it's working great. I recently allowed other authors to create posts by creating them accounts under "Staff". When a comment comes on a post of theirs, I still receive an email notification. Is it possible to email the author as well?

    • 36 replies

    There are 36 replies. Estimated reading time: 29 minutes

    1. Different authors publish blog posts at your Ghost blog, and they don't automatically get notified about replies to their respective blog posts? The problem is that Talkyard doesn't know who wrote the blog post; Talkyard doesn't know that it's a Ghost blog, or anyting about the authors and users in the Ghost database. — You, however, get notified, because you're admin and by default get notified about all replies evreywhere.

      I recently allowed other authors to create posts by creating them accounts under "Staff".

      Is that the Staff group in Talkyard? Or in Ghost?

      ***

      Possible solution alternatives, 1, 2, 3, (4):

      Alternative 1) They can login to your Talkyard Blog Comments site, click their username in the upper right corner, click View Profile, then click Preferences and Notifications, then set Default notifications, site wide to Every Post. Then they'll get notified about all comments (a.k.a. "posts", in Talkyard terminology). — That's the default setting for admins, and, that's why you, being an admin, get notfied about all comments.

      Alt. 2) They can log in to your Talkyard site, go to their Ghost blog post, and click Notifications: ... below the blog pots, at the top of the comment section. And then choose Every post (meaning, every comment on that blog post page).

      Alt. 1 problem: They get notfied also about replies to other people's blog posts.

      Alt. 2 problem: They need to remember to change the notification setting for their own blog posts (namely, enabling notifications).

      What are your thougts about 1 and 2?

      ***

      Can I ask, how many people are you, writing blog posts? Roghly how many posts per week? Feel free to type a link to your blog; would be interesting to have a look. I haven't heard about someone else doing this before (combined with Talkyard comments).

      ***

      Alt 3: It seems to me it'd be good if there was a way for the Ghost blog to automatically tell Talkyard who wrote the blog post. Does Ghost give each author a unique author id? (edit: yes, see below) — Maybe I could make it possible to send such author id from Ghost to Talkyard, so that Talkyard would know, who the author is, and can auto-configure Every Post ( = every comment) notifications to the author.

      This wouldn't have any of the problems with alt 1 and alt 2 above. Instead, you'd need to do a little bit manual work, namely to map Ghost author ids to Talkyard user ids.

      Here I see that Ghost templates does indeed have access to Ghost blog author data, incl an id field:

      id - the incremental ID of the author

      https://ghost.org/docs/api/v2/handlebars-themes/helpers/authors/#list-of-author-attributes

      What do you think about this "auto author" approach?

      ***

      But the author data, apparently does not include an email address. If there had been an email address, then:

      Alt 4: Automatically upsert the Ghost author into Talkyard, by listening to Ghost webhooks? and sending the author id, name, and email address from Ghost to Talkyard. Then, the Ghost blog authors wouldn't need to sign up at your Talkyard blog comments site at all — instead, Ghost + Talkyard would cooperate and do this automatically. ... But without an email address, this doesn't seem meaningful. I wonder why Ghost doesn't include an email address in their author data: https://ghost.org/docs/api/v2/content/#authors (click "Resources" then "Authors". No email addr mentioned).

      1. A
        In reply toadbertram:
        Adam Bertram @adbertram
          2019-08-14 11:37:46.462Z

          I don't want to have to manage two systems; I'd prefer to keep all authors in the Ghost database. I have them there now.

          I have about 20 authors approved to write. We publish one post/week.

          My blog is adamtheautomator.com.

          Yes. each author does have a unique ID. They also have an associated email address.

          I'm game to implement any way for authors to get email notifications automatically.

          1. Thanks for the info, interestnig to hear. I see some articles got fairly many comments.

            Maybe webhooks? If, whenever a comment gets posted, Talkyard makes a HTTP POST request to an url of your choice, with data about the reply, e.g. an url to the blog post and comment. Then maybe Ghost can listen to webhooks, and notify the author somehow? ... Or so I thought, but apparently Ghost doesn't have any enpoint for doing that: https://forum.ghost.org/t/is-there-an-api-endpoint-to-send-email/4066

            I don't want to have to manage two systems; I'd prefer to keep all authors in the Ghost database.

            To reply to comments, the authors still need accounts in the Talkyard database. So there'll be a Talkyard account in any case?

            (Plus, with the Talkyard accounts, the authors can subscribe to replies to each other's articles too ... If one author likes another author's blog post for example, and want to get notified of replies. And I would think some time later, there'll be "power user options" for ... maybe how often one gets reply notifications, or something like that. )

            ... Still, yes it seems a bit annoying to have two accounts (one in Ghost, one in Talkyard), per author.

            What if we ask for best practices and ideas, over at the Ghost forum?: https://forum.ghost.org — Do you want to do that? Otherwise I can ask.

            1. In reply toadbertram:
              AAdam Bertram @adbertram
                2019-08-14 20:01:37.223Z

                If you can have TalkYard send a webhook when a comment is created to a user-configurable URL, that might work. At a bare minimum, if you can send the post slug in the webhook, that would be enough for me. From the email I receive now as an admin, I get those.

                1. You would then setup a tiny HTTP server that listens for webhooks, and then looks up the URL in Ghost's database to find data about the blog post and author? And then emails the author?

                  I'd like to know if there's any way to avoid having-to-write-code and setting up a new server :- ) ... so I posted over at the Ghsot forum, see below.

                  1. AAdam Bertram @adbertram
                      2019-08-15 10:30:20.965Z

                      No. I would use Zapier.

                      1. Ok, interesting. Over at the Ghost forum, they suggested Zapier actually. Talkyard has an RSS feed (well, Atom) and if I review it so it includes everything needed by you, then you can connect this feed with a Zapier-something.

                        But how does your Zap endpoint know which URL belongs to each blog post, and author email? Doesn't your Zap-thing need access to the Ghost database to find out?

                        1. AAdam Bertram @adbertram
                            2019-08-15 11:51:11.994Z

                            How do I access the Atom feed?

                            1. First you need to go here: https://comments-for-adamtheautomator-com.talkyard.net/-/admin/settings/features and enable the API. Thereafter, you'll find the feed here: https://comments-for-adamtheautomator-com.talkyard.net/-/v0/feed.
                              However, the feed doesn't currently link to adamtheautomator.com; instead, it links to comments-for-adamtheautomator-com.talkyard.net, that is, the Talkyard site.

                              That's something I sholud probably change, in the next version of Talkyard (probably later this week).

                              Would that be all you need? An Atom feed to connect with Zapier, updated whenever a comment gets posted, and with links similar to: https://adamtheautomator.com/powershell-tutorial-mini-course/#comment-3

                  2. In reply toadbertram:

                    @someburneraccount, I have in mind to change the comment links in the recent comments Atom feed, to point to the embedding "real" site, rather than the Talkyard .net site with the comments. So, if someone visits yourdata.com and clicks a comment in the "Recent Post" list, they will stay at your site, rather than being redirected to yourforum.talkyard.net.

                    I'm thinking you'd consider this an improvement / bug fix? Since this means people will stay at your website, and will navigte to and see the comment there, rather than going to Talkyard.net. And when they stay at your site, there're more chances they'll find & read more articles, maybe see more ads. — Still I'd be interesting in hearing what you think about this?

                    (Background: This is about making the Atom feed work, together with Zapier, for notifying the authors of a multi author blog, about new comments.)

                    1. Update: Never mind this. I'm instead adding links to the blog posts, in <link rel="alternate" href="...."> links. And the <id>http:// ...</id> links will continue to point to the Talkyard site. — Later there'll be a separate feed specifically for blog comments, sth like /-/v0/embedded-comments-feed.

                    2. Progress
                      with doing this idea
                    3. KajMagnus @KajMagnus2019-08-15 03:34:54.687Z2019-08-15 11:18:59.711Z

                      @adbertram I asked over at the Ghost forum: https://forum.ghost.org/t/ghost-blog-comments-reply-notifications-to-authors-in-multi-author-blogs/8671 (I hope it's ok that I linked to your blog?).

                      Edit: Now they've replied — and they mentioned Zapier, seems like a good approach: https://forum.ghost.org/t/ghost-blog-comments-reply-notifications-to-authors-in-multi-author-blogs/8671/2

                      1. A
                        Adam Bertram @adbertram
                          2019-08-15 16:56:58.126Zreplies toKajMagnus:

                          Thanks for the help. I enabled the API and went to the link but I'm getting:

                          404 Not Found
                          No posts found, or they are private [TyE0FEEDPOSTS]

                          1. @adbertram, about: No posts found, or they are private [TyE0FEEDPOSTS] (at this url: https://comments-for-adamtheautomator-com.talkyard.net/-/v0/feed ) — that is something I need to fix. It's because by default listing all topics and replies, isn't allowed, even if they're publicly visible, like blog comments. But in the case of blog comments, a better default, is probably to allow listing them, so the feeds willl work. So I'll change this (for blog comments).

                            Not sure if Zapier supports only RSS, or both RSS and Atom. I asked their support people. Currently Talkyard is Atom only.

                            (Note to self: Here's Zapier's docs for RSS:
                            https://zapier.com/help/create/other-functions/trigger-zaps-from-new-rss-feed-items )

                            Ok so there're a bit more things to do than what I thought. Likely I'll have the feed working at the end of next week, not this week.

                            1. A
                              Adam Bertram @adbertram
                                2019-08-16 12:15:31.589Zreplies toKajMagnus:

                                Zapier does support RSS. If I can get an RSS/Atom feed of comments with the post URL, that's good enough for me.

                                1. KajMagnus @KajMagnus2019-08-19 10:50:30.158Z2019-08-19 10:56:55.740Zreplies toadbertram:

                                  Hi Adam, now I've added links in the feed to the blog article so you'll know which blog post got a comment. They're in <link rel="alternate" href="...."> links in the Atom feed. (The <id>http://....</id> links still point to the Talkyard site.)

                                  The Zapier tech support people tested their "zaps" with Atom instead of RSS, and say it seems to work. (Although the docs mention RSS only).

                                  To see the feed, currently you need to enable discussion forum features — here:
                                  https://comments-for-adamtheautomator-com.talkyard.net/-/admin/settings/features (don't forget to click Save afterwards),

                                  and then make the blog comments category "listed" instead of "un-listed", by going here:
                                  https://comments-for-adamtheautomator-com.talkyard.net/categories,
                                  clicking the Blog Comments category,
                                  clicking "Edit Category"
                                  and then, in the edit dialog,
                                  change this setting: "Unlist topics or category?" to "No, show them".

                                  Thereafter the feed will appear here: https://comments-for-adamtheautomator-com.talkyard.net/-/v0/feed.

                                  (If you want to, I can do all this for you — please let me know?)

                                  ***

                                  Some time later, there'll be another feed: /-/v0/embedded-comments-feed that doesn't require any of the changes above, and whose <id>https://....</id> link to the blog (instead of to the Talkyard site).

                                  1. A
                                    Adam Bertram @adbertram
                                      2019-08-19 13:34:58.520Zreplies toKajMagnus:

                                      I don't want to enable the discussion form. I simply need embedded comments on my blog on each post.

                                      What will enabling the discussion forum do? I really don't want another place to check for comments.

                                      1. KajMagnus @KajMagnus2019-08-19 13:54:18.502Zreplies toadbertram:

                                        Enabling the discussion forum, changes a bit how the topic list page looks at the Talkyard site: the category name, "Blog Comments", will be shown. Otherwise, forum features, like categories, aren't shown, for simplicity.

                                        Anyway I can try to find time to add the /-/v0/embedded-comments-feed feed now soon, that's the "real" solution that will also work better for other people.

                                        1. A
                                          Adam Bertram @adbertram
                                            2019-08-19 13:55:11.126Zreplies toKajMagnus:

                                            Thank you. If I can just get a simple feed to show comments and nothing more, that'd be great.

                                            1. A
                                              Adam Bertram @adbertram
                                                2019-08-28 14:00:37.638Zreplies toadbertram:

                                                Hi @KajMagnus, any progress on that RSS feed? I'd love to have this.

                                                1. KajMagnus @KajMagnus2019-08-29 07:17:42.985Zreplies toadbertram:

                                                  Will be included in the next release, this weekend or next week. — I just fixed this now (or so I think), thanks for reminding me.

                                                  1. A
                                                    Adam Bertram @adbertram
                                                      2019-09-05 13:58:09.219Zreplies toKajMagnus:

                                                      Did this get released? I tried to go here and it told me no posts were found: https://comments-for-adamtheautomator-com.talkyard.net/-/v0/feed

                                                      1. KajMagnus @KajMagnus2019-09-05 13:59:56.086Zreplies toadbertram:

                                                        Yes, the link is a bit different: https://comments-for-adamtheautomator-com.talkyard.net/-/v0/embedded-comments-feed

                                                        (sorry I forget to post an update about the release)

                                                        1. KajMagnus @KajMagnus2019-09-10 05:50:17.438Zreplies toadbertram:

                                                          Did you get the chance to try this yet? How did it work? (Or please message me later when you've given it a try? :- ))

                                                          1. @KajMagnus marked this topic as Started 2019-09-10 06:47:09.557Z.
                                                          2. A
                                                            Adam Bertram @adbertram
                                                              2019-09-10 18:08:54.603Zreplies toKajMagnus:

                                                              I looked at it but it's going to be tough since the blog author isn't in the RSS feed. Can you somehow include the Ghost author name or ID somehow in the entry for the post?

                                                              1. KajMagnus @KajMagnus2019-09-12 05:20:39.592Zreplies toadbertram:

                                                                Talkyard doesn't know the name or ID of the Ghost author (or even that it's a Ghost blog). Those things are in the Ghost database and in the text on the blog page, but doesn't get sent to the Talkyard server.

                                                                What about looking up the blog post url path in Ghost's database, and in that way find the blog post id, and then lookup its author id?

                                                                For example, given this link in the Atom feed:

                                                                <id>https://adamtheautomator.com/pass-hashtables-invoke-command-argument/#comment-1</id>

                                                                you'd lookup /pass-hashtables-invoke-command-argument/, find a Ghost blog post id, and then the author's id.

                                                                ***

                                                                I'm wondering if there's some way to write a Ghost <—> Talkyard plugin, so Ghost authors get auto-inserted into Talkyard's database, and configured to get notifications for their blog posts. Then, the authors could also choose to stop receiving notifications (by unsubscribing, via Talkyard), ... And to start receiving notifications for other things at your blog, e.g. other authors they might like.

                                                                1. A
                                                                  Adam Bertram @adbertram
                                                                    2019-09-12 17:15:35.248Zreplies toKajMagnus:

                                                                    I would love some kind of Talkyard Ghost integration. https://ghost.org/integrations/

                                                                    I can make it work somehow with my current workflow but it's going to be a little hacky.

                                                                    1. P
                                                                      Andreas Pieber @pieber
                                                                        2020-05-19 12:17:05.850Zreplies toKajMagnus:

                                                                        I'm still something missing... I've tried the following two options:

                                                                        ➜ ~ curl --user tyid=2:xyz https://x.y.z/-/v0/feed
                                                                        404 Not Found
                                                                        No posts found, or they are private [TyE0FEEDPOSTS]% ➜ ~

                                                                        ➜ ~ curl --user tyid=2:xyz https://x.y.z/-/v0/embedded-comments-feed
                                                                        404 Not Found
                                                                        No posts found, or they are private [TyE0FEEDPOSTS]%

                                                                        Do I need to activate something else?

                                                                        1. KajMagnus @KajMagnus2020-05-20 04:11:17.594Z2020-05-20 04:29:03.169Zreplies topieber:

                                                                          Your site has some contents, visible for not logged in people?

                                                                          That 404 message means that access permission settings don't let not-logged-in people see any pages. Or that the site is empty.

                                                                          This: --user tyid=2:xyz is currently ignored for these endpoints — the feeds are intended for not-logged-in users (at least this far).

                                                                          B.t.w. currently the feeds look only at the most recent 25 posts. And if all of them are access-not-allowed unless logged in, then you'll get this 404 Not Found.

                                                                          1. P
                                                                            Andreas Pieber @pieber
                                                                              2020-05-20 06:09:29.164Zreplies toKajMagnus:

                                                                              None of the content is visible for not logged in people :-) I would like to write a script which syncs threads to issues in my issue tracker (one way). I though that listening for the feed might be a good idea to do so. Do you have a better approach for me?

                                                                              1. KajMagnus @KajMagnus2020-05-20 08:51:09.832Zreplies topieber:

                                                                                Maybe it'd be good if what you tried to do, did actually work. I'm looking into that now. I mean --user tyid=2:xyz to list restricted contents. — Some time later, maybe webhooks could be a better way to sync threads.

                                                                                1. KajMagnus @KajMagnus2020-05-20 09:15:05.400Zreplies topieber:

                                                                                  a script which syncs threads to issues in my issue tracker

                                                                                  This means that new topics in Talkyard (thread = topic? e.g. a Question page or a Problem or Idea page, or Discussion page),
                                                                                  should create issues in the issue tracker?

                                                                                  The topic title and topic text ( = original post) should get copied? But not the replies?

                                                                                  There's a List API that returns JSON and that I think is actually better for this. It's not completely implemented for your use case, but almost. You would call it like this:

                                                                                  /-/v0/list  {
                                                                                    listQuery: {
                                                                                      findWhat: 'Pages',
                                                                                      sortOrder: 'NewestFirst',
                                                                                    }
                                                                                  }
                                                                                  

                                                                                  And you get back:

                                                                                  interface ListQueryResults<T extends ThingFound> {
                                                                                    origin: string;
                                                                                    thingsFound?: T[];
                                                                                  }
                                                                                  
                                                                                  // where  T = PageFound:
                                                                                  
                                                                                  interface PageFound {
                                                                                    pageId: PageId;
                                                                                    title: string;
                                                                                    // Prefix with the origin (included in the response) to get the full URL.
                                                                                    urlPath: string;
                                                                                    excerpt?: string;    // <—— maybe you'd want the complete text instead, as HTML?
                                                                                    author?: ParticipantFound;
                                                                                    categoriesMainFirst?: CategoryFound[];
                                                                                    postsFound?: PostFound[];
                                                                                  }
                                                                                  
                                                                                  1. P
                                                                                    Andreas Pieber @pieber
                                                                                      2020-05-20 10:10:37.573Zreplies toKajMagnus:

                                                                                      Basically I do need to implement the following two tasks:

                                                                                      • When a new topic is created a new ticket should be created in my tracker
                                                                                      • When a comment is added to a topic a comment should be posted to an existing ticket.

                                                                                      So pages/topics alone are not enough.

                                                                                      1. KajMagnus @KajMagnus2020-05-20 11:03:54.654Zreplies topieber:

                                                                                        Ok. That will work via the same API, just 'Posts' instead of 'Pages', see below. (This also not yet completely implemented.)

                                                                                        /-/v0/list  {
                                                                                          listQuery: {
                                                                                            findWhat: 'Posts',
                                                                                            sortOrder: 'NewestFirst',
                                                                                            limit: number,
                                                                                          }
                                                                                        }
                                                                                        

                                                                                        Some time later: Maybe in your case it could be good with sth like: newerThan: <date-time>, instead of limit: number. Maybe combined with webhooks.

                                                                                        1. P
                                                                                          Andreas Pieber @pieber
                                                                                            2020-05-20 14:51:16.211Zreplies toKajMagnus:

                                                                                            I would be happy with this. Now I know what you mean by "not yet completed implemented".

                                                                                            curl --header "Content-Type: application/json" \
                                                                                              --request POST \
                                                                                              --data '{"listQuery": { "findWhat": "Pages",   "sortOrder": "NewestFirst" }}' \
                                                                                              --user tyid=2:xxxx \
                                                                                              https://xxx.yyy.zzzz/-/v0/list
                                                                                            501 Not Implemented
                                                                                            Currently lookWhere.inCategories needs to be one category [TyE205KDT56]%   
                                                                                            

                                                                                            What do you think when it will be fully implemented?

                                                                                            While a newerThan and webhooks would be great, I would be fully happy with the API calls named by you.

                                                                                            1. KajMagnus @KajMagnus2020-05-21 21:57:27.061Zreplies topieber:

                                                                                              What do you think when it will be fully implemented?

                                                                                              I might be done with this already; I'm adding end-to-end tests now. Will probably be included in the upcoming version, some time next week. (Needs some testing first here at Ty .io.)

                                                                                              501 Not Implemented \n Currently lookWhere.inCategories needs to be one category

                                                                                              That because I previously implemented as little as possible, namely one specific use case someone asked about: Listing the popular topics in one specific category.
                                                                                              I'm adding more use cases when needed (like now, when you mention listing all posts).

                                                                                              I asked about what details you need for your tracker, here: https://www.talkyard.io/-390#post-2 — we can continue in that other topic (since this is no longer about Ghost).