首页 > 解决方案 > 向频道发布主动消息时如何在机器人中设置“您和版主可以回复”?

问题描述

我目前正在开发一个向频道发布主动消息的机器人。我的客户希望我主动设置No replyYou and moderator can reply在从机器人发布的消息上。 

到目前为止我尝试了什么:

// post message to channels
const credentials = new MicrosoftAppCredentials(process.env.MicrosoftAppId, process.env.MicrosoftAppPassword);
const client = new ConnectorClient(credentials, { baseUri: serviceUrl });
const message = MessageFactory.text(inMessage);

let approveResult = false;
let MessageActivityId = "";

const conversationParams = {
    isGroup: true,
    bot: {
        id: process.env.MicrosoftAppId,
        name: process.env.BotName
    },
    conversationType: 'channel',
    channelData: {
        channel: {
            id: teamsChannelId
        }
    },
    activity: message
};

const msRes = await client.conversations.createConversation(conversationParams).catch(e => console.log(e));

我尝试先发布消息,并立即更新活动并将类型设置为ActivityTypes.EndOfConversation. 但是,它根本不起作用。

const tmpResult = await client.conversations.updateActivity(teamsChannelId, msRes.activityId, {type: ActivityTypes.EndOfConversation})

updateActivity 代码上方的错误表单: 

RestError: Unknown activity type
at ...(skipped for paths)

{
    code: 'BadArgument',
    statusCode: 400,
    request: WebResource {
        streamResponseBody: false,
        url: 'https://{service_url}/{channel_id}/activities/{messageActivityId}',
        method: 'PUT',
        headers: HttpHeaders {
            _headersMap: [Object]
        },
        body: '{"type":"endOfConversation"}',
        query: undefined,
        formData: undefined,
        withCredentials: false,
        abortSignal: undefined,
        timeout: 0,
        onUploadProgress: undefined,
        onDownloadProgress: undefined,
        proxySettings: undefined,
        keepAlive: undefined,
        agentSettings: undefined,
        operationSpec: {
            httpMethod: 'PUT',
            path: 'v3/conversations/{conversationId}/activities/{activityId}',
            urlParameters: [Array],
            requestBody: [Object],
            responses: [Object],
            serializer: [Serializer]
        }
    },
    response: {
        body: '{"error":{"code":"BadArgument","message":"Unknown activity type"}}',
        headers: HttpHeaders {
            _headersMap: [Object]
        },
        status: 400
    },
    body: {
        error: {
            code: 'BadArgument',
            message: 'Unknown activity type'
        }
    }
}

有什么方法可以让我这样做吗?谢谢。如果我只能以编程方式禁用 Channels from bot 中的回复功能会更好。


2021-06-28 更新:

模拟 UI 上的预期行为: 在此处输入图像描述

在 UI 上模拟实际行为: 在此处输入图像描述

标签: javascriptnext.jsbotframeworkbotsmicrosoft-teams

解决方案


我自己并没有实际测试过这个属性,但它似乎应该处理你需要的东西:在 Teams 应用程序清单中,机器人上有一个“NotificationOnly”设置,这意味着它不应该允许用户与之交谈(即“回复”)。在https://docs.microsoft.com/en-us/microsoftteams/platform/resources/bot-v3/bots-notification-only查看更多信息


推荐阅读