interactive_message * [actions] => Array * ( * [0] => stdClass Object * ( * [name] => type * [type] => select * [selected_options] => Array * ( * [0] => stdClass Object * ( * [value] => ID|1 * ) * ) * ) * ) * [callback_id] => classify|438 * [team] => stdClass Object * ( * [id] => {SLACKTEAM} * [domain] => {SLACKDOMAIN} * ) * [channel] => stdClass Object * ( * [id] => {SLACKCHANNEL} * [name] => directmessage * ) * [user] => stdClass Object * ( * [id] => {SLACKUSER} * [name] => {SLACKUSER} * ) * [action_ts] => 1603777165.467584 * [message_ts] => 1603768794.012800 * [attachment_id] => 3 * [token] => Oow8S2EFvrZoS9z8N4nwf9Jo * [is_app_unfurl] => * [original_message] => stdClass Object * ( * ... * ) * [response_url] => {SLACKRESPONSEURL} * [trigger_id] => 1452241456197.39333245939.7f8618e13013ae0a0ae7d86be2258021 */ class InteractiveMessage extends Base { protected const LOGKEY = 'IIM'; // Does the event respond with a reply to the HTTP request, or via a post with a trigger public $respondNow = TRUE; public function __get($key) { switch ($key) { // An event can have more than 1 action, each action can have 1 value. case 'action_id': case 'name': case 'type': return object_get(Arr::get(object_get($this->_data,'actions'),$this->index),$key); case 'value': switch ($this->type) { case 'button': return Arr::get(object_get($this->_data,'actions'),$this->index)->value; case 'select': return Arr::get(object_get(Arr::get(object_get($this->_data,'actions'),$this->index),'selected_options'),0)->value; } break; case 'channel_id': return object_get($this->_data,'channel.id'); case 'message_ts': return object_get($this->_data,$key); default: return parent::__get($key); } } /** * This method should be overridden by a local implementation * * @return Message */ public function respond(): Message { Log::info(sprintf('%s:Interactive Message - Callback [%s] Name [%s] Type [%s]',static::LOGKEY,$this->callback_id,$this->name,$this->type),['m'=>__METHOD__]); $action = NULL; $id = NULL; if (preg_match('/^(.*)\|([0-9]+)/',$this->callback_id)) { [$action,$id] = explode('|',$this->callback_id,2); } elseif (preg_match('/^[a-z_]+$/',$this->callback_id)) { $id = $this->name; $action = $this->callback_id; } else { // If we get here, its an action that we dont know about. Log::notice(sprintf('%s:Unhandled CALLBACK [%s]',static::LOGKEY,$this->callback_id),['m'=>__METHOD__]); } switch ($action) { default: Log::notice(sprintf('%s:Unhandled ACTION [%s]',static::LOGKEY,$action),['m'=>__METHOD__]); return (new Message)->text('That didnt work, I didnt know what to do with your button - you might like to tell '.$this->team()->owner->slack_user); } } }