触发发送松弛消息

问题描述 投票:0回答:1

我正在开发一种解决方案,当用户在 salesforce 上创建记录时,将消息发送到 Slack 通道。我已经通过 Apex SDK for Slack App 并成功将该应用程序与 salesforce 连接起来。

我想在 salesforce 上创建一个触发器,当用户创建记录时,它将调用 Slack.ActionDispatcher 类,

/* 此示例 apex 类扩展了 Slack.ActionDispatcher 并负责 响应“view_opportuniy”、“view_account”中定义的“onsubmit”事件, 和“view_contact”视图。 */ 公共类 ActionDispatcherPostRecordDetailMessage 扩展 Slack.ActionDispatcher {

public override Slack.ActionHandler invoke(Map<String, Object> parameters, Slack.RequestContext context) {
    return Slack.ActionHandler.ack(new Handler(parameters, context));
}

public class Handler implements Slack.RunnableHandler {
    Map<String, Object> parameters;
    Slack.RequestContext context;

    public Handler(Map<String, Object> parameters, Slack.RequestContext context) {
        this.parameters = parameters;
        this.context = context;
    }

    public void run() {
        Slack.App app = Slack.App.ApexSlackApp.get();
        Slack.UserClient userClient = app.getUserClientForTeam(this.context.getTeamId(), this.context.getUserId());

        String recordId = (String) this.parameters.get('recordId');
        String objectApiName = (String) this.parameters.get('objectApiName');

        Slack.ViewReference viewReference = Slack.View.record_detail_message.get();
        viewReference.setParameter('headerText', objectApiName + ' Record Details');
        viewReference.setParameter('recordId', recordId);
        viewReference.setParameter('objectApiName', objectApiName);

        Slack.ChatPostMessageRequest req = new Slack.ChatPostMessageRequest.builder()
            .channel((String) this.parameters.get('channelId'))
            //TODO should text be required if you are setting a view reference?
            .text('Details for record id' + recordId)
            .viewReference(viewReference)
            .build();

        Slack.ChatPostMessageResponse response = userClient.ChatPostMessage(req);
        if (response.getError() != null) {
            System.debug(response.getResponseMetadata().getMessages());
        }
    }
}

} 这是我的触发器

公共静态无效handleOpportunity(列表新机会){ 对于(机会opp:新机会){

        ActionDispatcherPostRecordDetailMessage.Handler handler = new ActionDispatcherPostRecordDetailMessage.Handler(
            new Map<String, Object>{
                'recordId' => opp.Id,
                    'objectApiName' => 'Opportunity',
                    'channelId' => 'your_slack_channel_id_here'
                    },
            new Slack.RequestContext() 
        );
        
        
        handler.run();
    }
} 

在触发器中我得到一个方法不可见:void Slack.RequestContext.()错误

我期望当用户创建记录时,会将包含记录详细信息的松弛消息发送到通道。记录进入频道后,我将使用块来更新 salesforce 中的记录。

salesforce slack apex slack-block-kit
1个回答
0
投票

您似乎遇到了错误,因为 Slack.RequestContext 构造函数在您的上下文中不可见。这可能是因为它不是可公开访问的构造函数。要解决此问题,您可以使用其 builder() 方法创建 Slack.RequestContext 的新实例,而不是直接调用构造函数。您可以通过以下方法修改触发器来解决此问题: 公共静态无效handleOpportunity(列表新机会){ for (机会 opp : newOpportunities) { ActionDispatcherPostRecordDetailMessage.Handler 处理程序 = new ActionDispatcherPostRecordDetailMessage.Handler( 新地图{ 'recordId' => opp.Id, 'objectApiName' => '机会', 'channelId' => 'your_slack_channel_id_here' }, Slack.RequestContext.builder().build() // 使用builder创建RequestContext实例 );

    handler.run();
}

} 通过使用 builder() 方法,您可以创建 Slack.RequestContext 的新实例,而无需直接调用其构造函数,这应该可以解决可见性问题。这应该允许您的触发器运行而不会遇到“方法不可见”错误。

© www.soinside.com 2019 - 2024. All rights reserved.