как проверить, существует ли идентификатор пользователя или идентификатор беседы или пользователь уже в sunshine через node.js

#smooch #supportkit

Вопрос:

Я автоматически отвечаю на предопределенное приветственное сообщение пользователю, когда он публикует сообщение через страницу fb или WhatsApp. Я хочу, чтобы, если пользователь уже существует в sunshine, то не отвечал этому пользователю, а отвечал им приветственным сообщением. Как я могу проверить, существует ли пользователь уже? «используйте строгий»;

     // Imports
    `enter code here`const express = require('express');
    const bodyParser = require('body-parser');
    const SunshineConversationsApi = require('sunshine-conversations-client');
    var request = require('request')
    // Config
    let defaultClient = SunshineConversationsApi.ApiClient.instance;
    let basicAuth = defaultClient.authentications['basicAuth'];
    basicAuth.username = 'app_XXXXXXX';
    basicAuth.password = 'XXXXXXXXXXXXXXXXX-bSwG85aM8qldJzTt4rgZlf_XQukWKE8ADMno85g';
    const PORT = 5050;

    const apiInstance = new SunshineConversationsApi.MessagesApi()

    // Server https://expressjs.com/en/guide/routing.html
    const app = express();

    app.use(bodyParser.json());

    // Expose /messages endpoint to capture webhooks 
    https://docs.smooch.io/rest/#operation/eventWebhooks
    app.post('/messages', function(req, res) {
    console.log('webhook PAYLOAD:n', 
     JSON.stringify(req.body.events[0].payload.conversation.id, null, 4));
     const appId = req.body.app.id;
     const trigger = req.body.events[0].type;

    // Call REST API to send message https://docs.smooch.io/rest/#operation/postMessage
    if (trigger === 'conversation:message') {
    const authorType = req.body.events[0].payload.message.author.type;
    const displayName=req.body.events[0].payload.message.author.displayName;
    if(authorType === 'user'){
    const conversationId = req.body.events[0].payload.conversation.id;
    console.log(conversationId);
    console.log(displayName);
    check_conversation_ID_with_sunshine(appId,conversationId);
    //sendMessage(appId, conversationId);
    res.end();
    }
    }
    });

    // Listen on port
    app.listen(PORT, () => {
    console.log(`App listening on port ${PORT}`);
    });

    async function sendMessage(appId, conversationId){
    let messagePost = new SunshineConversationsApi.MessagePost();  
    messagePost.setAuthor({type: 'business'});
    messagePost.setContent({type: 'text', text: 'Thanks boy'});
    let response = await apiInstance.postMessage(appId, conversationId, messagePost);
    //console.log('API RESPONSE:n', response);
    }
 

Ответ №1:

Таким образом, [простой] общий процесс может быть:

  • Приходит сообщение пользователя (включая идентификатор пользователя и идентификатор беседы)
  • извлеките диалог пользователя
  • if len(response['messages']) == 1 (сообщения в разговоре)
    • отправить приветственное сообщение
  • (иначе нет-оп)

Предостережение заключается в том, что вы можете получить ложноотрицательные результаты, если пользователи отправят несколько сообщений в быстрой последовательности в самом начале (вместо одного).

Некоторые безопасные способы сделать это состояли бы в том, чтобы либо:

  • найдите приветственное сообщение в начале собрания (второе сообщение?)
    • т. е. повторите [первые несколько] response['messages'] , проверяя текст/метаданные каждого из них
  • при отправке приветственного сообщения добавьте флаг метаданных в разговор (например: metadata.['welcomeSent']: True ), найдите этот флаг для возвращающихся пользователей

Ссылки на документы

Получать сообщения от собеседника

  • страница документа: https://docs.smooch.io/rest/#operation/listMessages
  • конечная точка: https://api.smooch.io/v2/apps/{appId}/conversations/{conversationId}/messages
  • аутентификация: Базовая и т.д.
  • полезная нагрузка: <нет>
  • полезная нагрузка для ответа: {messages:[...], meta:{...}, links:{}}

Комментарии:

1. @сайед ответил ли это на ваш вопрос?