【问题标题】:MS teams bot JS - create conversationMS 团队机器人 JS - 创建对话
【发布时间】:2020-02-14 09:47:30
【问题描述】:

我需要在 msteams 的频道上主动创建对话。所以我找了一些例子,但没有找到任何真正主动对话创建的例子。所有示例首先包括处理消息,并使用上下文创建对话。 更准确地说,我有 facebook、whatsapp 和 web 小部件。例如,用户从 facebook 写,我通过 fb webhook 获取消息,我需要创建新线程(在频道内回复块),只有在那之后,才会有人使用线程块在频道中回答,我会收到消息。 据我了解,我需要引导对话对象并使用 adapter.createConversation({ ...convFields }),但例如我没有 serviceUrl。

// i am using adapter from examples
new BotFrameworkAdapter({
      appId: id,
      appPassword: password
});

// then i have something like that in examples

    const conversationParameters = {
      isGroup: true,
      channelData: {
        channel: {
          id: 'msteams'
        }
      },

      activity: 'dsada'
    };


    const connectorClient = this.adapter.createConnectorClient(
      context.activity.serviceUrl // i don't have context to get that serviceUrl, because i must do it first, not handle message and create thread after that.
    );
    const conversationResourceResponse = await connectorClient.conversations.createConversation(
      conversationParameters as any
    );
    const conversationReference = TurnContext.getConversationReference(
      context.activity // same here, i don't have context
    );
    conversationReference.conversation.id = conversationResourceResponse.id;
    return [conversationReference, conversationResourceResponse.activityId];

【问题讨论】:

    标签: javascript node.js botframework microsoft-teams


    【解决方案1】:

    为了防止(或至少阻止)垃圾邮件,您的机器人只能向已安装它的频道或群聊发送主动消息。在这种情况下,您需要存储您将收到的 conversationUpdate membersAdded 事件中的必要信息。

    对于 1:1 聊天,可以与用户创建新对话,但是您的机器人需要知道用户的 ID 才能这样做。通常,这是通过检索安装了您的机器人的群聊或团队的名单来实现的。

    基本上,不可能发送完全主动的消息 - 机器人需要安装和/或有一些关于它之前发送消息的位置的信息。

    假设您可以获得正确的权限,则可以主动安装您的机器人。有关该方法的更多详细信息,请参阅本文:https://docs.microsoft.com/en-us/graph/teams-proactive-messaging

    即使它是在 C# 中,您可能会发现此示例很有帮助,因为它演示了向每种类型的目标发送主动消息所需的最少信息量(跨语言相同):https://github.com/clearab/teamsProactiveMessaging。

    相关文件如下:

    public class MessageSender : IMessageSender
    {
        private ConnectorClient conClient;
        private string serviceUrl;
    
        public MessageSender(string serviceUrl, string id, string password)
        {
            MicrosoftAppCredentials.TrustServiceUrl(serviceUrl);
            conClient = new ConnectorClient(new Uri(serviceUrl), id, password);
        }
    
        public async Task<ResourceResponse> SendOneToOneMessage(string conversationId, Activity activity)
        {
            return await conClient.Conversations.SendToConversationAsync(conversationId, activity);
    
        }
    
        public async Task<ConversationResourceResponse> CreateOneToOneConversation(string userId, string tenantId)
        {
            var members = new List<ChannelAccount>()
            {
                new ChannelAccount
                {
                    Id = userId
                }
            };
    
            ConversationParameters conParams = new ConversationParameters
            {
                Members = members,
                TenantId = tenantId
            };
    
            return await this.conClient.Conversations.CreateConversationAsync(conParams);
    
        }
    
        public async Task<ConversationResourceResponse> CreateAndSendChannelMessage(string channelId, Activity activity)
        {
            ConversationParameters conParams = new ConversationParameters
            {
                ChannelData = new TeamsChannelData
                {
                    Channel = new ChannelInfo(channelId)
                },
                Activity = activity
            };
    
            ConversationResourceResponse response = await this.conClient.Conversations.CreateConversationAsync(conParams);
    
            return response;
        }
    
        public async Task<ResourceResponse> SendReplyToConversationThread(string threadId, Activity activity)
        {
            return await this.conClient.Conversations.SendToConversationAsync(threadId, activity);
        }
    }
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-02
    • 1970-01-01
    相关资源
    最近更新 更多