def forSent_Template(listOfTemp, user_id): d = listOfTemp if (len(d) == 0): line_bot_api.push_message( user_id, TextSendMessage( text="ไม่พบการกระทำผิดเกี่ยวกับข้อมูลที่ท่านได้สอบถาม")) elif (len(d) > 5): for c in range(0, len(d) + 1, 5): if (c + 5 < len(d)): carousel_template_message = TemplateSendMessage( alt_text='Carousel template', template=CarouselTemplate(columns=d[c:c + 5])) line_bot_api.push_message(user_id, carousel_template_message) else: carousel_template_message = TemplateSendMessage( alt_text='Carousel template', template=CarouselTemplate(columns=d[c:])) line_bot_api.push_message(user_id, carousel_template_message) else: carousel_template_message = TemplateSendMessage( alt_text='Carousel template', template=CarouselTemplate(columns=d)) line_bot_api.push_message(user_id, carousel_template_message)
def getCarouselTemplates(self): carouselTemplates = [] if (len(self.__personList) > 0): for person in self.__personList: carouselColumns = self.__getCarouselColumns(person=person) carouselTemplate = TemplateSendMessage( alt_text='收到通報訊息!', template=CarouselTemplate(columns=carouselColumns)) carouselTemplates.append(carouselTemplate) else: sourceImageCarouselColumn = CarouselColumn( thumbnail_image_url=self.__sourceImage['imageUrl'], title='來源影像', text='來源人數:{}\n' \ '時間:{}'.format(self.__sourceImage['personCount'], datetime.fromtimestamp(int(self.__sourceImage['timestamp']+ 28800))), actions=[ PostbackAction( label=' ', data='doNothing' ) ] ) carouselTemplate = TemplateSendMessage( alt_text='收到通報訊息!', template=CarouselTemplate(columns=[sourceImageCarouselColumn])) carouselTemplates.append(carouselTemplate) return carouselTemplates
def push_booking_days(line_id): slots = time_slot_service.get_booking_days() cols = [] groups = [slots[i:i + 3] for i in range(0, len(slots), 3)] for group in groups: while len(group) < 3: group.append(None) actions = [] for slot in group: if slot: year, month, day = slot.date.split('-') dt = datetime.strptime( slot.date, '%Y-%m-%d').replace(tzinfo=timezone('Asia/Taipei')) label = '{month}-{day} {weekday}'.format( month=month, day=day, weekday=WEEKDAY[dt.weekday()]) data = 'DATE#{}'.format(slot.date) actions.append( PostbackAction(label=label, data=build_postback_data(data))) else: actions.append(PostbackAction(label=' ', data=' ')) cols.append(CarouselColumn(text='請選擇想預約的日期', actions=actions)) templates = TemplateSendMessage(alt_text='開放預約日期', template=CarouselTemplate(columns=cols)) push_templates(line_id, templates)
def line_bot_car_suggestion_response(event, result): status = result.get("status") if status is None or status != "ok": line_bot_api.reply_message( event.reply_token, TextSendMessage(text="抱歉無法找到適合您的商品~\n請更加詳細描述您的購買需求!")) return columns_data = [] for p in result["products"]: image_url = p["photo"] title = "%s %s" % (p['brand'], p["name"]) price = '價格: %s - %s 萬' % (str(p["min_price"]), str(p["max_price"])) action_intro = URITemplateAction(label='詳細資料', uri=p['url_for_mobile']) carousel_obj = CarouselColumn(thumbnail_image_url=image_url, title=title, text=price, actions=[action_intro]) columns_data.append(carousel_obj) if len(columns_data) >= 10: break message = TemplateSendMessage(alt_text="您的推薦結果", template=CarouselTemplate( columns=columns_data, imageSize='contain')) line_bot_api.reply_message(event.reply_token, message)
def push_my_reservation(line_id): tz = timezone('Asia/Taipei') today = datetime.now(tz=tz).strftime('%Y-%m-%d') reservations = reservation_service.get_by_line_id(line_id).filter( time_slot__date__gte=today).order_by('time_slot__date')[:10] if len(reservations) <= 0: push_templates(line_id, TextSendMessage(text='你目前沒有預約任何時段喔!')) return cols = [] for reservation in reservations: info = {} info['customer'] = reservation.customer_name info['date'] = reservation.time_slot.date info['begin'] = reservation.time_slot.hour info['end'] = reservation.time_slot.hour + 1 text = '{customer}\n{date}\n{begin}:00 ~ {end}:00'.format(**info) data = 'CANCEL#{id}'.format(id=reservation.id) actions = [ PostbackAction(label='取消預約', data=build_postback_data(data)) ] cols.append(CarouselColumn(text=text, actions=actions)) templates = TemplateSendMessage(alt_text='預約時段查詢', template=CarouselTemplate(columns=cols)) push_templates(line_id, templates)
def sendCarousel(event): #轉盤樣板 try: message = TemplateSendMessage( alt_text='轉盤樣板', template=CarouselTemplate(columns=[ CarouselColumn( thumbnail_image_url='https://i.imgur.com/4QfKuz1.png', title='這是樣板一', text='第一個轉盤樣板', actions=[ MessageTemplateAction(label='文字訊息一', text='賣披薩'), URITemplateAction(label='連結文淵閣網頁', uri='http://www.e-happy.com.tw'), PostbackTemplateAction(label='回傳訊息一', data='action=sell&item=披薩'), ]), CarouselColumn( thumbnail_image_url='https://i.imgur.com/qaAdBkR.png', title='這是樣板二', text='第二個轉盤樣板', actions=[ MessageTemplateAction(label='文字訊息二', text='賣飲料'), URITemplateAction(label='連結台大網頁', uri='http://www.ntu.edu.tw'), PostbackTemplateAction(label='回傳訊息二', data='action=sell&item=飲料'), ]) ])) line_bot_api.reply_message(event.reply_token, message) except: line_bot_api.reply_message(event.reply_token, TextSendMessage(text='發生錯誤!'))
def generate_message_for_question(question): choices = [question.answer, *question.wrong_choices] random.shuffle(choices) choices = [ *filter(lambda s: '皆' not in s, choices), *filter(lambda s: '皆' in s, choices) ] if len(choices) > 4 or any(len(s) > 20 for s in choices): template = CarouselTemplate(columns=[ CarouselColumn(title=f'選項 {option}', text=choice[:60], actions=[ MessageTemplateAction(label='選擇', text=f'答案:{choice}') ]) for option, choice in zip('ABCDE', choices) if choice != '' ]) return [ TextSendMessage(text=f'Q: {question.message}'), TemplateSendMessage(alt_text='請作答:', template=template) ] else: return [ TemplateSendMessage(alt_text='請作答:', template=ButtonsTemplate( text=f'Q: {question.message}', actions=[ MessageTemplateAction( label=choice, text=f'答案:{choice}', ) for choice in choices if choice != '' ])) ]
def handle_message(event): text = event.message.text result = re.match('TOP(\d+)', text, re.IGNORECASE) if result: n = int(result.group(1)) if n > 100: n = 100 top_n = anime.sort_values('Score', ascending=False).head(n) titles = '' for row in enumerate(top_n['Japanese name']): titles += f"{row[1]}, " line_bot_api.reply_message( event.reply_token, [ TextSendMessage(text=f"アニメTOP{n}"), TextSendMessage(text=titles) ] ) else: query1 = anime['Japanese name'].str.contains(text, case=False) query2 = anime['Name'].str.contains(text, case=False) anime_index = anime[query1 | query2].head(1).index if anime_index.empty: line_bot_api.reply_message( event.reply_token, [ TextSendMessage(text='見当たらない'), StickerSendMessage(package_id='6136', sticker_id='10551393') ] ) else: titles = '' contents = [] for i, number in enumerate(indices[anime_index][0][:6]): if i == 0: target = f"「{anime.at[number, 'Japanese name']}」をご覧になったあなたへ" continue title = anime.at[number, 'Japanese name'] id = anime_image.at[number, 'MAL_ID'] contents.append(CarouselColumn( thumbnail_image_url=anime_image.at[number, 'IMAGE_URL'], text=title, actions=[ URIAction( label='detail', uri=f'https://myanimelist.net/anime/{id}' ) ] )) titles += f"{title}, " line_bot_api.reply_message( event.reply_token, [ TextSendMessage(text=target), TemplateSendMessage(alt_text=titles, template=CarouselTemplate(columns=contents, image_size='contain')) ] )
def composeCarousel(alt_text, columns): carousel_columns = [] for column in columns: actions = [] for action in column['actions']: if action['type'] == 'postback': actions.append( PostbackTemplateAction(label=action['label'], data=action['data'])) elif action['type'] == 'message': actions.append( MessageTemplateAction(label=action['label'], text=action['text'])) elif action['type'] == 'uri': actions.append( URITemplateAction(label=action['label'], uri=action['uri'])) col = CarouselColumn(thumbnail_image_url=column['thumbnail_image_url'], title=column['title'], text=column['text'], actions=actions) carousel_columns.append(col) template = TemplateSendMessage( alt_text=alt_text, template=CarouselTemplate(columns=carousel_columns)) return template
def push_booking_slot(line_id, date_str): booking_info = time_slot_service.get_booking_slots(date_str) cols = [] groups = [booking_info[i:i + 3] for i in range(0, len(booking_info), 3)] for group in groups: while len(group) < 3: group.append(None) carousel_text = '預約的日期是{date},請選擇時段' actions = [] for info in group: if info: carousel_text = carousel_text.format(date=info['slot'].date) begin = info['slot'].hour end = begin + 1 label = '{begin}點-{end}點 ({remain})'.format( begin=begin, end=end, remain=info['remain']) data = 'CONFIRM#{}'.format(info['slot'].id) actions.append( PostbackAction(label=label, data=build_postback_data(data))) else: actions.append(PostbackAction(label=' ', data=' ')) cols.append(CarouselColumn(text=carousel_text, actions=actions)) templates = TemplateSendMessage(alt_text='請選擇預約的時段', template=CarouselTemplate(columns=cols)) push_templates(line_id, templates)
def send_news_carousel(id, imglinks, titles, links): cols = [] for i, img in enumerate(imglinks): cols.append( CarouselColumn( thumbnail_image_url=img, title='NBA news', text=titles[i], actions=[ URITemplateAction( label='Read more', uri=links[i] ) ] ) ) message = TemplateSendMessage( alt_text='Carousel template', template=CarouselTemplate(columns=cols) ) line_bot_api.push_message(id, message) return "OK"
def reply_template_carousel(reply_token, text, alt_text, id): line_bot_api = LineBotApi(setting.ACCESS_TOKEN) line_bot_api.reply_message(reply_token, [ TemplateSendMessage( alt_text=alt_text, template=CarouselTemplate([ CarouselColumn(text='星5', actions=[ PostbackTemplateAction(label='星5', data='5 ' + str(id)) ]), CarouselColumn(text='星4', actions=[ PostbackTemplateAction(label='星4', data='4 ' + str(id)) ]), CarouselColumn(text='星3', actions=[ PostbackTemplateAction(label='星3', data='3 ' + str(id)) ]), CarouselColumn(text='星2', actions=[ PostbackTemplateAction(label='星2', data='2 ' + str(id)) ]), CarouselColumn(text='星1', actions=[ PostbackTemplateAction(label='星1', data='1 ' + str(id)) ]), ])) ])
def get_message(self): if self.length() == 0: return "見つかりませんでした。。" columns = [] for rakuten_book in self.rakuten_books: image = Image() path = image.download(rakuten_book.image_url) image_magic = ImageMagic() image_magic.convert(path) gyazo = Gyazo() gyazo_url = gyazo.upload(path) text = ("著:" + rakuten_book.author + "\n¥" + str(rakuten_book.price) + "\n発売日:" + rakuten_book.sales_date) text = text[:60] column = CarouselColumn( thumbnail_image_url=gyazo_url, title=rakuten_book.title[:40], text=text, actions=[ PostbackTemplateAction(label="借りる / 買う", data="isbn:" + rakuten_book.isbn) ], ) columns.append(column) return CarouselTemplate(columns=columns)
def message_carousel(alt_text, lists_columns): return TemplateSendMessage( alt_text=alt_text, template=CarouselTemplate( columns=lists_columns ) )
def handle_locationmessage(event): lat = event.message.latitude lng = event.message.longitude querystring = {'key': config.RECRUIT_API_KEY, 'lat': lat, 'lng': lng, 'range': 3, 'lunch': 1, 'type': 'lite', 'count': 20, 'format': 'json'} url = '{}?{}'.format(GOURMET_ENDPOINT, urllib.urlencode(querystring)) r = urlfetch.fetch(url) content = json.loads(r.content) shops = content['results']['shop'] random.shuffle(shops) columns = [] # 5件分まわす for shop in shops[:5]: columns.append(CarouselColumn(thumbnail_image_url=build_static_map_url(shop['lat'], shop['lng']), title=shop['name'], text=shop['genre']['catch'] + '\n' + shop['catch'], actions=[URITemplateAction(label='Open', uri=shop['urls']['pc'])],)) line_api.reply_message(event.reply_token, messages=TemplateSendMessage(alt_text="お店リスト", template=CarouselTemplate(columns=columns)))
def handout(): handout_carouse = CarouselTemplate(columns=[ CarouselColumn(thumbnail_image_url=handout_icon1, title='課程講義 page 1', text='請選擇您要的講義', actions=[ URITemplateAction(label='網頁概論', uri=html_url), URITemplateAction(label='Python 基礎', uri=python_basic_url), URITemplateAction(label='Linux', uri=linux_url), ]), CarouselColumn(thumbnail_image_url=handout_icon2, title='課程講義 page 2', text=' ', actions=[ URITemplateAction(label='PyETL', uri=pyetl_url), URITemplateAction(label='PyAI', uri=pyai_url), URITemplateAction(label='Data Mining(含R語言)', uri=data_mining_url), ]), CarouselColumn(thumbnail_image_url=handout_icon3, title='課程講義 page 3', text=' ', actions=[ URITemplateAction(label='NoSQL', uri=nosql_url), URITemplateAction(label='Text Mining + NLU', uri=text_mining_nlu_url), URITemplateAction(label='Kafka', uri=kafka_url), ]) ]) return handout_carouse
def make_messsage(self, text): if "オッケー藍染" == text or "オッケーあいぜん" == text: carousel_template_message = TemplateSendMessage( alt_text='Carousel template', template=CarouselTemplate(columns=[ CarouselColumn( thumbnail_image_url= 'https://shota-imazeki.herokuapp.com/static/あつもり_魚.jpg', title='あつもり魚検索機能', text='北 or 南半球、対象月を選択することでその時期に取れる魚の種類と値段が分かります。', actions=[ URITemplateAction( label='ダッシュボードへ', uri= 'https://public.tableau.com/profile/.43986973#!/vizhome/bugs/fish_1?publish=yes' ) ]), CarouselColumn( thumbnail_image_url= 'https://shota-imazeki.herokuapp.com/static/あつもり_虫.jpg', title='あつもり昆虫検索機能', text='北 or 南半球、対象月を選択することでその時期に取れる虫の種類と値段が分かります。', actions=[ URITemplateAction( label='ダッシュボードへ', uri= 'https://public.tableau.com/profile/.43986973#!/vizhome/bugs/bugs_1?publish=yes' ) ]) ])) return carousel_template_message, True else: return None, False
def search_restaurant(event): lat = '-6.1648459' lon = '106.8230685' BASE_URL = "https://developers.zomato.com/api/v2.1/search?" req = requests.get( BASE_URL + 'lat=' + str(lat) + '&lon=' + str(lon), headers={"user-key": "02e0e7ef3a3f6767835c22d029322fe7"}) response = json.loads(req.text) restaurants = response['restaurants'] columns = [] for data in restaurants: restauran = data['restaurant'] columns.append( CarouselColumn( thumbnail_image_url= 'https://image.flaticon.com/icons/png/512/229/229374.png', image_background_color='#FFFFFF', text=restauran['location']['address'][:50], title=restauran['name'], actions=[ URIAction(label='Cek Restoran', uri=restauran['url']), PostbackAction(label='Lihat Peta', data='ping') ])) carousel_template = CarouselTemplate(columns=columns[10:]) template_message = TemplateSendMessage(alt_text='Carousel alt text', template=carousel_template) line_bot_api.reply_message(event.reply_token, template_message)
def push_my_recent_courses(self, line_id): member = member_repo.get_by_line_id(line_id) applied_courses = course_apply_repo.get_my_recent_courses(member)[:10] columns = [] for applied_course in applied_courses: schedule = applied_course.schedule course = schedule.course actions = [] actions.append(MessageAction(label='課程說明', text=course.description)) title = '{name} {start}'.format(name=course.name, start=schedule.start_date) col = CarouselColumn(title=title, text=course.desc, actions=actions, thumbnail_image_url=course.image_url) columns.append(col) template = TemplateSendMessage( alt_text='近期課程來囉', template=CarouselTemplate(columns=columns, image_aspect_ratio='square'), ) push_templates(line_id, [template])
def view_catalog(event, i_items, compare_id=None): bot_api.reply_message( event.reply_token, list( filter(None, [ TextSendMessage(text=""" Select item to compare with: """.strip()) if compare_id is not None else None, TemplateSendMessage( alt_text='Product list', template=CarouselTemplate(columns=[ CarouselColumn( thumbnail_image_url=item.image, text=f""" Rp {'{:,}'.format(item.price)},-{f" ({round(item.promo * 100)}% off)" if item.promo is not None else ""} """.strip(), title=item.name, actions=[ PostbackTemplateAction( label='Select', data=make_beacon('compare', id=[compare_id, i])), ] if compare_id is not None else [ PostbackTemplateAction( label='Buy', data=make_beacon('buy', id=i )), PostbackTemplateAction(label='Details', data=make_beacon( 'details', id=i)), PostbackTemplateAction(label='Compare', data=make_beacon( 'view', compare=i)) ]) for i, item in i_items ])) ])))
def getCarouselTemplate(self): carouselColumns = self.__getCarouselColumns() carouselTemplate = TemplateSendMessage( alt_text='收到通報訊息!', template=CarouselTemplate(columns=carouselColumns)) return carouselTemplate
def get_current_program(message) -> TemplateSendMessage: """현재 진행중인 프로그램을 소개합니다.""" def limit_len(text, limit): return text if len(text) < limit else text[:limit-1] + '…' current_programs = [ p for p in get_programs() if p.startedAt < utcnow() < p.finishedAt ] columns = [ CarouselColumn( thumbnail_image_url=program.owner.profile.image, title=limit_len(program.name, 40), text=limit_len(program.desc, 60), actions=[ URIAction( label='자세히 보기', uri=(f"https://www.pycon.kr/program/talk-detail" f"?id={program.id}") ) ] ) for program in current_programs ][:10] if not columns: return TextSendMessage( '현재 진행중인 프로그램이 없네요! 부스를 둘러보시는 것은 어떨까요?' ) return TemplateSendMessage( alt_text='https://www.pycon.kr/program/talks', template=CarouselTemplate(columns=columns) )
def send_room_list(self, event): url = 'http://reservasi.if.its.ac.id/calendar' response = requests.get(url).content dom = pq(response) carousel_columns = [] options = dom("#room_select option:not([selected])") actions = [] for option in options: room_name = option.text actions.append( MessageAction(label='%s hari ini' % room_name, text='!today %s' % room_name) ) if (len(actions) == 3): carousel_columns.append( CarouselColumn(text="Daftar ruangan %s" % str( len(carousel_columns) + 1), actions=actions) ) actions = [] carousel_template = CarouselTemplate( columns=carousel_columns ) template_message = TemplateSendMessage( alt_text='Daftar ruangan', template=carousel_template ) line_bot_api.reply_message(event.reply_token, template_message)
def test_carousel_template(self): arg = { 'image_aspect_ratio': 'rectangle', 'image_size': 'cover', 'columns': [ CarouselColumn( thumbnail_image_url='https://example.com/bot/images/item1.jpg', image_background_color='#FFFFFF', title='this is menu', text='description', default_action=URIAction(label='View detail', uri='http://example.com/page/123'), actions=[ PostbackAction(label='Buy', data='action=buy&itemid=155'), URIAction(label='View detail', uri='http://example.com/page/155'), ] ), CarouselColumn( thumbnail_image_url='https://example.com/bot/images/item2.jpg', image_background_color='#000000', title='this is menu', text='description', default_action=URIAction(label='View detail', uri='http://example.com/page/222'), actions=[ PostbackAction(label='Buy', data='action=buy&itemid=555'), URIAction(label='View detail', uri='http://example.com/page/555'), ] ) ] } self.assertEqual( self.serialize_as_dict(arg, type=self.CAROUSEL), CarouselTemplate(**arg).as_json_dict() )
def get_programs(topic: str = None) -> TemplateSendMessage: def limit_len(text, limit): return text if len(text) < limit else text[:limit - 1] + '…' columns = [ CarouselColumn( thumbnail_image_url=program['owner']['profile']['image'], title=limit_len(program['name'], 40), text=limit_len(program['desc'], 60), actions=[ URIAction(label='자세히 보기', uri=(f"https://www.pycon.kr/program/talk-detail" f"?id={program['id']}")) ]) for program in requests.post( 'https://www.pycon.kr/api/graphql', headers={ 'Accept-Encoding': 'gzip, deflate, br', 'Content-Type': 'application/json', 'Accept': 'application/json', }, data= '{"query":"query getPresentations {\\n presentations {\\n id\\n owner {\\n profile {\\n name\\n image\\n avatarUrl\\n bio\\n blogUrl\\n }\\n }\\n name\\n place {\\n name\\n }\\n duration\\n startedAt\\n finishedAt\\n desc\\n language\\n backgroundDesc\\n category {\\n name\\n }\\n difficulty {\\n name\\n }\\n startedAt\\n finishedAt\\n }\\n}","variables":{}}' # noqa ).json()['data']['presentations'] if not topic or topic in program['name'] ][:10] return TemplateSendMessage( alt_text='https://www.pycon.kr/program/talks', template=CarouselTemplate( columns=columns)) if len(columns) > 0 else TextSendMessage( '말씀하신 주제에 관련된 발표나 정보를 찾지 못했어요. 😢')
def create_carousel(rest_colum): arr = [] for rest in rest_colum: if rest["image_url"]["shop_image1"] == "": if "jpeg" not in rest["image_url"][ "shop_image1"] and "png" not in rest["image_url"][ "shop_image1"]: rest["image_url"][ "shop_image1"] = "http://illustrain.com/img/work/2016/illustrain01-okashi08.png" if rest["opentime"] == "": rest["opentime"] = "情報なし" if rest["holiday"] == "": rest["holiday"] = "情報なし" if rest["budget"] == "": rest["budget"] = "情報なし" arr.append(rest) carousel_template = CarouselTemplate(columns=[ CarouselColumn( thumbnailImageUrl=rest["image_url"]["shop_image1"], text=rest["name"] + "\n【営業時間】" + rest["opentime"] + "\n【休業日】" + rest["holiday"] + "\n【平均予算】" + str(rest["budget"]), actions=[URITemplateAction(label="開く", uri=rest["url_mobile"])]) for rest in arr ]) return carousel_template
def make_carousel_object(result): '''Message Template''' carousel_list = [] for item in result[:10]: description = '\n'.join( ['%s: %s' % (title, item[title]) for title in TITLES])[:60] action_list = [ #PostbackAction(label='Book a meeting', # data=item['Name'], # text='Book a meeting with %s' % item['Name']), URIAction(label='Company Summary', uri='line://app/1611201899-GaVvEBB3?id=' + item['NavisionID']), URIAction(label='Contact List', uri='line://app/1611201899-xj78kWWZ?id=' + item['NavisionID']), URIAction(label='Interesting', uri='line://app/1611201899-mkn59qqz?id=' + item['NavisionID']), ] obj = CarouselColumn(text=description, title=item['Name'][:40], actions=action_list) carousel_list.append(obj) carousel_template = CarouselTemplate(columns=carousel_list) template_message = TemplateSendMessage( alt_text='Here are the companies/resellers we found', template=carousel_template) return template_message
def show(self): return TemplateSendMessage( alt_text="account help button message", template=CarouselTemplate(columns=[ CarouselColumn( title=self.title, text=self.text, actions=[ MessageTemplateAction(label='line帳號綁定學號', text='account/register'), MessageTemplateAction(label='帳號喜好', text='account/hobby'), MessageTemplateAction(label='帳號喜好設定', text='account/hobby/time') ]), CarouselColumn( title=self.title, text=self.text, actions=[ MessageTemplateAction(label='喜好快速查詢', text='account/hobby/search'), MessageTemplateAction(label='喜好快速預約', text='account/hobby/booking'), MessageTemplateAction(label='帳號預約紀錄', text='account/booking') ]), ]))
def sendCarousel(event): #轉盤樣板 try: message = TemplateSendMessage( alt_text='其他', template=CarouselTemplate( columns=[ CarouselColumn( thumbnail_image_url='https://encrypted-tbn0.gstatic.com/images?q=tbn%3AANd9GcT4NQBoplbhOoo3bc_Zgj37mraOw88ddrWP7LTZfpfnY7FcDr5m&usqp=CAU', title=' ', text='其他資訊', actions=[ URITemplateAction( label='洗錢型態例子', uri='https://www.mjib.gov.tw/EditPage?PageID=564dcbaf-1d4e-45a9-bf1e-a26ea488bd76' ), MessageTemplateAction( label='國際防制洗錢標準', text='1.處罰洗錢及資恐行為2.沒收不法所得及進行目標制裁3.國際合作4.建立防治機制' ), URITemplateAction( label='最新資訊', uri='https://www.amlo.moj.gov.tw/1461/1467/Lpsimplelist' ), ] ), ] ) ) line_bot_api.reply_message(event.reply_token,message) except: line_bot_api.reply_message(event.reply_token,TextSendMessage(text='發生錯誤!'))
def create_carousel_template(event, books_title, books_image_url, books_detail_url, number_of_books=1): """ 1~3冊の本を取得してカルーセル型のリプライメッセージを作成し、返信する max characters of title are 40 max characters of text are 60 :param event: :param books: """ columns_list = [] url_label = 'ウェブでさがす' for i in range(number_of_books): # title = 'おすすめの本 : ' + str(i+1) + '冊目' # text = trim_str_60(books_title[i]) title = books_title[i] text = books_title[i] image = books_image_url[i] actions = [URITemplateAction(label=url_label, uri=books_detail_url[i])] c_column = CarouselColumn(title=title, text=text, thumbnail_image_url=books_image_url[i], actions=actions) columns_list.append(c_column) carousel_template = CarouselTemplate(columns=columns_list) template_message = TemplateSendMessage(alt_text='Buttons alt text', template=carousel_template) return template_message