Example #1
0
 def test_persistent_menu(self):
     target = {
         "event":
         "persistentMenu",
         "menuContent": [{
             "menus": [{
                 "type": "TEXT",
                 "data": {
                     "title": "챗봇 안내",
                     "code": "CHATBOT_GUIDE"
                 }
             }, {
                 "type": "LINK",
                 "data": {
                     "title": "이벤트 페이지",
                     "url": "http://your-pc-url.com/event",
                     "mobileUrl": "http://your-mobile-url.com/event"
                 }
             }, {
                 "type": "LINK",
                 "data": {
                     "title": "전화하기",
                     "url": "tel:021234567",
                     "mobileUrl": None
                 }
             }, {
                 "type": "NESTED",
                 "data": {
                     "title":
                     "공지사항",
                     "menus": [{
                         "type": "LINK",
                         "data": {
                             "title": "교환/환불 안내",
                             "url": "http://your-pc-url.com/guide",
                             "mobileUrl": "http://your-mobile-url.com/guide"
                         }
                     }]
                 }
             }]
         }]
     }
     payload = PersistentMenuPayload(menus=[
         Button.ButtonText(title='챗봇 안내', code='CHATBOT_GUIDE'),
         Button.ButtonLink(title='이벤트 페이지',
                           url='http://your-pc-url.com/event',
                           mobile_url='http://your-mobile-url.com/event'),
         Button.ButtonLink(title='전화하기', url='tel:021234567'),
         Button.ButtonNested(
             title='공지사항',
             menus=[
                 Button.ButtonLink(
                     title="교환/환불 안내",
                     url="http://your-pc-url.com/guide",
                     mobile_url="http://your-mobile-url.com/guide")
             ])
     ])
     self.assertEqual(target, payload)
Example #2
0
def open_handler(event):
    user_id = event.user_id
    ntalk.send(
        user_id,
        "테스트에 성공했구나 :)",
        quick_reply=Template.QuickReply([
            Button.ButtonLink(
                "코드 보러가기",
                "https://github.com/HwangWonYo/naver_talk_sdk/blob/master/example/example.py"
            ),
            Button.ButtonText("따라 말하기")
        ]))
Example #3
0
def calendar_handler(event):
    user_id = event.user_id
    text = event.text
    ntalk.send(user_id,
               '선택하신 날짜는 {} 이군요.'.format(text),
               quick_reply=Template.QuickReply([
                   Button.ButtonText('카드뷰 보기', 'CardView'),
                   Button.ButtonCalendar(title='날짜 다시 선택하기',
                                         code='Calendar_Test',
                                         placeholder='다시 선택 하는 거다',
                                         start='20180305',
                                         end='20180417',
                                         disables="1")
               ]))
Example #4
0
def time_component_handler(event):
    user_id = event.user_id
    text = event.text
    ntalk.send(user_id,
               '선택하신 시간은 {} 이군요'.format(text),
               quick_reply=Template.QuickReply(
                   [Button.ButtonText('카드뷰 보기', 'CardView')]))
Example #5
0
def carview_show(event):
    user_id = event.user_id
    ntalk.send(
        user_id,
        message=Template.CompositeContent(composite_list=[
            Template.Composite(title='페이로드 백을 담은 카드뷰',
                               description='상세 설명',
                               button_list=[
                                   Button.ButtonText('쓰레드 넘김', 'PassThread'),
                                   Button.ButtonText('타이핑 액션', 'TYPING_ON'),
                                   Button.ButtonText('프로필 보기', 'Profile')
                               ]),
            Template.Composite(
                title='링크 버튼을 담은 카드뷰',
                description='이건 회색 글씨로 나온다!',
                button_list=[
                    Button.ButtonLink(
                        'nta github page',
                        'https://github.com/HwangWonYo/naver_talk_sdk'),
                    Button.ButtonLink('네이버 파트너 센터',
                                      'https://partner.talk.naver.com/'),
                    Button.ButtonText('ElementList 카드뷰', 'ElementListCardView')
                ]),
            Template.Composite(
                title='세번째 카드 리스트',
                description='1. Time Component',
                button_list=[
                    Button.ButtonTime('시간을 눌러봅시다.', code='Time_Test'),
                    Button.ButtonCalendar(
                        '날짜를 선택해봅시다.',
                        code='Calendar_Test',
                        placeholder=
                        '글자 수 제한이 있을까? 이 친구는 5월만 고를 수 있어. 또 일요일은 빼자',
                        start='20180501',
                        end='20180531',
                        disables='0'),
                    Button.ButtonTimeInterval('시간을 선택해봅시다.',
                                              code='TimeInterval_test')
                ]),
            Template.Composite(title='네번째 카드 리스트',
                               description='New Payload !',
                               button_list=[
                                   Button.ButtonText('Product Message 보기',
                                                     'SHOW_PRODUCT_MESSAGE')
                               ])
        ]))
Example #6
0
def send_handler(event):
    """
    사용자가 버튼을 눌러 코드값 callback을 사용해도 send_handler가 작동한다.
    만약 코드 값의 callback 함수만 동작하게 하고 싶다면 is_code일 경우 return 하면된다.
    """
    if event.is_code:
        return
    user_id = event.user_id
    text = event.text

    #주도권이 파트너에게 있는 경우 standby는 True
    if event.standby:
        ntalk.send(user_id=user_id,
                   message="쓰레드 작동중 !!",
                   quick_reply=Template.QuickReply(
                       [Button.ButtonText('쓰레드 가져오기', 'TakeThread')]))
    else:
        ntalk.send(user_id, "무슨 말을 해도 따라합니다.\n" "카드뷰 형식을 보고 싶으면 퀵리플라이 클릭")
        ntalk.send(user_id,
                   text,
                   quick_reply=Template.QuickReply(
                       [Button.ButtonText('카드뷰 보기', 'CardView')]))
Example #7
0
def show_element_list_card_view(event):
    user_id = event.user_id
    ntalk.send(
        user_id,
        message=Template.CompositeContent(composite_list=[
            Template.Composite(
                title='엘리먼트 리스트 카드뷰 1',
                description='element는 3개까지 가능',
                element_list=Template.ElementList(data=[
                    Template.ElementData(title='쓰레드 넘김',
                                         description='파트너에게 쓰레드를 넘긴다',
                                         sub_description='그러면 standby는 True',
                                         button=Button.ButtonText(
                                             '쓰레드 넘김', 'PassThread')),
                    Template.ElementData(title='타이핑 액션',
                                         description='다른 입력이 들어오면 꺼진다',
                                         sub_description='10초간 지속된다.',
                                         button=Button.ButtonText(
                                             '타이핑 액션', 'TYPING_ON')),
                    Template.ElementData(
                        title='프로필 보기',
                        description='프로필 이벤트가 발생한다.',
                        sub_description='이벤트로 발생해서 사용하기 어려움...',
                        button=Button.ButtonText('프로필 보기', 'Profile')),
                ])),
            Template.Composite(
                title='엘리먼트 리스트 카드뷰 2',
                description='element는 3개까지 가능',
                element_list=Template.ElementList(data=[
                    Template.ElementData(
                        title='nta 깃헙 페이지',
                        description='파이썬 개발시 용이하다',
                        sub_description='쓸만하다',
                        button=Button.ButtonLink(
                            'nta github page',
                            'https://github.com/HwangWonYo/naver_talk_sdk'),
                    ),
                    Template.ElementData(
                        title='파트너 센터 페이지',
                        description='네이버 톡톡 챗봇의 시작',
                        sub_description='계정은 각자 만들어야 한다',
                        button=Button.ButtonLink(
                            '네이버 파트너 센터', 'https://partner.talk.naver.com/'),
                    ),
                    Template.ElementData(title='카드뷰',
                                         description='카드뷰로 보여준다',
                                         sub_description='사용은 각자에게 달려있다',
                                         button=Button.ButtonText(
                                             '카드뷰', 'CardView')),
                ]))
        ]))
    def test_persistent_menu(self):
        responses.add(
            responses.POST,
            NaverTalkApi.DEFAULT_API_ENDPOINT,
            json={
                "success": True,
                "resultCode": "00"
            },
            status=200
        )

        counter = mock.MagicMock()
        def test_callback(res, payload):
            self.assertEqual(
                payload,
                {
                    "event": "persistentMenu",
                    "menuContent": [{
                        "menus":
                            [{
                                "type": "TEXT",
                                "data": {
                                    "title": "챗봇 안내",
                                    "code": "CHATBOT_GUIDE"
                                }
                            }, {
                                "type": "LINK",
                                "data": {
                                    "title": "이벤트 페이지",
                                    "url": "http://your-pc-url.com/event",
                                    "mobileUrl": "http://your-mobile-url.com/event"
                                }
                            }, {
                                "type": "LINK",
                                "data": {
                                    "title": "전화하기",
                                    "url": "tel:021234567",
                                    "mobileUrl": None
                                }
                            }, {
                                "type": "NESTED",
                                "data": {
                                    "title": "공지사항",
                                    "menus":
                                        [{
                                            "type": "LINK",
                                            "data": {
                                                "title": "교환/환불 안내",
                                                "url": "http://your-pc-url.com/guide",
                                                "mobileUrl": "http://your-mobile-url.com/guide"
                                            }
                                        }]
                                }
                            }]
                    }]
                }
            )
            counter()

        self.tested.persistent_menu(
            menus=[
                Button.ButtonText(title='챗봇 안내', code='CHATBOT_GUIDE'),
                Button.ButtonLink(
                    title='이벤트 페이지',
                    url='http://your-pc-url.com/event',
                    mobile_url='http://your-mobile-url.com/event'
                ),
                Button.ButtonLink(
                    title='전화하기',
                    url='tel:021234567'
                ),
                Button.ButtonNested(
                    title='공지사항',
                    menus=[
                        Button.ButtonLink(
                            title="교환/환불 안내",
                            url="http://your-pc-url.com/guide",
                            mobile_url="http://your-mobile-url.com/guide"
                        )
                    ]
                )
            ],
            callback=test_callback
        )
        self.assertEqual(counter.call_count, 1)
     Option Button is not allowed.
     Sad..

     How to register persistent menu:
     python persistent_menu_example.py

"""
import os

from nta import NaverTalkApi, Button

NAVER_TALK_ACCESS_TOKEN = os.environ['naver_talk_access_token']
ntalk = NaverTalkApi(NAVER_TALK_ACCESS_TOKEN)


def my_callback(res, payload):
    #callback function for showing result of send persistent menu payload
    print(res)


ntalk.persistent_menu(menus=[
    Button.ButtonText('고정 메뉴 테스트', 'PersistentMenu'),
    Button.ButtonLink('Link to NTA',
                      'https://github.com/HwangWonYo/naver_talk_sdk'),
    Button.ButtonNested(title='버튼을 품은 버튼 이라는데?',
                        menus=[
                            Button.ButtonText('아무 의미 없는 버튼'),
                            Button.ButtonText('카드뷰 보기', 'CardView'),
                        ])
],
                      callback=my_callback)