IFTTT에서 slack에 게시한 내용을 python의 slackbot 라이브러리가 픽업할 수 없는 현상에 대해서
현상
pypi를 통해 파이썬 slackbot 라이브러리를 설치하면 IFTTT에서 slack에 게시 한 내용을 픽업 할 수 없습니다.
pip install slackbot
run.py# -*- encoding: utf-8 -*-
from slackbot.bot import Bot
from slackbot.bot import listen_to
@listen_to('てすと')
def listen_func(message):
    message.send('ぽん')
def main():
    bot = Bot()
    bot.run()
if __name__ == '__main__':
    main()
 
# 이유
 이 기사 에 있는 것처럼, 통상의 투고와 IFTTT 경유의 투고에서는 포맷이 다르기 때문입니다.
데이터의 취득은 slackbot의 「dispacher.py」라고 하는 소스가 하고 있습니다만,
여기에서 취득한 데이터를 print하는 소스를 넣어 내용을 보면 ...
dispacher.py    def dispatch_msg(self, msg):
        category = msg[0]
        msg = msg[1]
        print(msg)  # <- 44行目にprintを仕込む
        if not self._dispatch_msg_handler(category, msg):
            if category == u'respond_to':
                if not self._dispatch_msg_handler('default_reply', msg):
                    self._default_reply(msg)
python run.py
# 普通に投稿した場合
{
  'type': 'message', 
  'user': ‘XXXXXXXX’, 
  'text': 'てすと', 
  'client_msg_id': ‘XXXXXXX’, 
  (略)
}
# IFTTT経由で投稿した場合
{
  'username': 'IFTTT', 
  'icons': {'image_36': 'https://a.slack-edge.com/8f51/img/services/ifttt_36.png', 
  'image_48': 'https://a.slack-edge.com/8f51/img/services/ifttt_48.png', 'image_72': 
  'https://a.slack-edge.com/8f51/img/services/ifttt_72.png'}, 
  'attachments': [
    {
     'pretext': 'しゅっしゃ', 
     'fallback': 'しゅっしゃ', 
     'mrkdwn_in': ['text', 'pretext']
    }
   ], 
  (略)
}
전혀 다릅니다.
그래서 일반적으로 게시물의 데이터 형식 만 지원하므로,
IFTTT의 게시물은 dispacher.py에서 데리러 있지 않습니다.
 대책
dispacher의 msg를 얻는 부분을 다시 씁니다.
아래는 dispacher.py의 49 행 ~입니다.
(2019/9/15 갱신: 아무래도 메시지의 형식이 미묘하게 바뀐 것 같습니다, 코멘트 감사합니다!)
(편집 전) dispacher.py    def _dispatch_msg_handler(self, category, msg):
        responded = False
        for func, args in self._plugins.get_plugins(category, msg.get('text', None)):
            if func:
                responded = True
                try:
(편집 후) dispacher.py    def _dispatch_msg_handler(self, category, msg):
        responded = False
        text = None
        if 'attachments' in msg and len(msg.get('attachments')) > 0:
            text = msg['attachments'][0].get('pretext', None)
        elif 'text' in msg:
            text = msg.get('text', None)
        for func, args in self._plugins.get_plugins(category, text):
            if func:
                responded = True
                try:
차이:
 htps : // 기주 b. 코 m / ぃ s05 / s ぁ 쿠보 t / 코 m 파레 /에서 ゔ ぉ p. . . 주전자 10 : ゔぇぉ p
이것을 다시 써서 python run.py 하면 제대로 IFTTT에도 반응하게 됩니다.
 
 수정된 코드
 htps : // 기주 b. 코 m / 주전자 10 / s ぁ ck 보트 t / t ree /
(※코드 본체의 수정만으로 특별히 테스트는 추가하지 않습니다...)
 참고 기사
                
                    
        
    
    
    
    
    
                
                
                
                
                    
                        
                            
                            
                            Reference
                            
                            이 문제에 관하여(IFTTT에서 slack에 게시한 내용을 python의 slackbot 라이브러리가 픽업할 수 없는 현상에 대해서), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
                                
                                https://qiita.com/yakan10/items/6fa70ab7643e66022f3b
                            
                            
                            
                                텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
                            
                            
                                
                                
                                 우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)
                                
                                
                                우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)
                            
                            
                        
                    
                
                
                
            
pip install slackbot
# -*- encoding: utf-8 -*-
from slackbot.bot import Bot
from slackbot.bot import listen_to
@listen_to('てすと')
def listen_func(message):
    message.send('ぽん')
def main():
    bot = Bot()
    bot.run()
if __name__ == '__main__':
    main()
    def dispatch_msg(self, msg):
        category = msg[0]
        msg = msg[1]
        print(msg)  # <- 44行目にprintを仕込む
        if not self._dispatch_msg_handler(category, msg):
            if category == u'respond_to':
                if not self._dispatch_msg_handler('default_reply', msg):
                    self._default_reply(msg)
python run.py
# 普通に投稿した場合
{
  'type': 'message', 
  'user': ‘XXXXXXXX’, 
  'text': 'てすと', 
  'client_msg_id': ‘XXXXXXX’, 
  (略)
}
# IFTTT経由で投稿した場合
{
  'username': 'IFTTT', 
  'icons': {'image_36': 'https://a.slack-edge.com/8f51/img/services/ifttt_36.png', 
  'image_48': 'https://a.slack-edge.com/8f51/img/services/ifttt_48.png', 'image_72': 
  'https://a.slack-edge.com/8f51/img/services/ifttt_72.png'}, 
  'attachments': [
    {
     'pretext': 'しゅっしゃ', 
     'fallback': 'しゅっしゃ', 
     'mrkdwn_in': ['text', 'pretext']
    }
   ], 
  (略)
}
dispacher의 msg를 얻는 부분을 다시 씁니다.
아래는 dispacher.py의 49 행 ~입니다.
(2019/9/15 갱신: 아무래도 메시지의 형식이 미묘하게 바뀐 것 같습니다, 코멘트 감사합니다!)
(편집 전) dispacher.py
    def _dispatch_msg_handler(self, category, msg):
        responded = False
        for func, args in self._plugins.get_plugins(category, msg.get('text', None)):
            if func:
                responded = True
                try:
(편집 후) dispacher.py
    def _dispatch_msg_handler(self, category, msg):
        responded = False
        text = None
        if 'attachments' in msg and len(msg.get('attachments')) > 0:
            text = msg['attachments'][0].get('pretext', None)
        elif 'text' in msg:
            text = msg.get('text', None)
        for func, args in self._plugins.get_plugins(category, text):
            if func:
                responded = True
                try:
차이:
htps : // 기주 b. 코 m / ぃ s05 / s ぁ 쿠보 t / 코 m 파레 /에서 ゔ ぉ p. . . 주전자 10 : ゔぇぉ p
이것을 다시 써서 python run.py 하면 제대로 IFTTT에도 반응하게 됩니다.

수정된 코드
 htps : // 기주 b. 코 m / 주전자 10 / s ぁ ck 보트 t / t ree /
(※코드 본체의 수정만으로 특별히 테스트는 추가하지 않습니다...)
 참고 기사
                
                    
        
    
    
    
    
    
                
                
                
                
                    
                        
                            
                            
                            Reference
                            
                            이 문제에 관하여(IFTTT에서 slack에 게시한 내용을 python의 slackbot 라이브러리가 픽업할 수 없는 현상에 대해서), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
                                
                                https://qiita.com/yakan10/items/6fa70ab7643e66022f3b
                            
                            
                            
                                텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
                            
                            
                                
                                
                                 우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)
                                
                                
                                우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)
                            
                            
                        
                    
                
                
                
            
Reference
이 문제에 관하여(IFTTT에서 slack에 게시한 내용을 python의 slackbot 라이브러리가 픽업할 수 없는 현상에 대해서), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/yakan10/items/6fa70ab7643e66022f3b텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
                                
                                
                                
                                
                                
                                우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)