Ich werde die Erklärung viel falten. Es tut uns leid. Vielleicht ist der Code auch schmutzig. Es tut uns leid. - -
Wenn Sie LINE Bot für geschäftliche Zwecke verwenden, was wahrscheinlich von fast jedem in Japan verwendet wird (?), Benötigen Sie eine bemannte Funktion, oder? (Vielleicht) Deshalb werden wir ein Reservierungssystem aufbauen, das so einfach wie möglich besetzt werden kann! Machen! !! !!
LINEBOT: Reservierungssystem
Welche Art von Code tatsächlich erstellt wurde, ist leichter zu verstehen, wenn Sie sich die Realität ansehen! Der Operator ist mit mir verbunden (lacht) Bemannte Funktionen sind durch Verknüpfung von Datenbank und PUSH Message möglich! !! Mit der kostenlosen Version können Sie nur bis zu 1000 Fälle pro Monat bearbeiten. Wenn Sie sie also tatsächlich für geschäftliche Zwecke verwenden, sollten Sie sie mit einem kostenpflichtigen Lichtplan verwenden.
Typisch
pip install Flask
pip install line-bot-sdk
pip install flask_sqlalchemy
pip install Pillow
・
・
Andere
Es ist so. Es mag einige Pausen geben, aber ich bin bestrebt, die Aktionen in minimale Teile zu unterteilen und sie auf leicht verständliche Weise zu verwalten.
├── projects
├── static
└── contents
├── FollowAction.py
├── ImageAction.py
├── PostBackAction.py
└── TextAction.py
└── server.py
└── Settings.py
└── config.ini
『server.py』 Hier spiele ich die Rolle des Einrichtens eines Servers, aber hier entwerfe ich auch die Datenbank. Es ist besser, es zu teilen, Diesmal ist es okay.
server.py
# coding:utf-8
from flask import Flask, request, abort
from flask_sqlalchemy import SQLAlchemy
from linebot import (
LineBotApi, WebhookHandler
)
from linebot.exceptions import (
InvalidSignatureError
)
from linebot.models import (
MessageEvent, TextMessage, TextSendMessage, PostbackEvent, ButtonsTemplate, PostbackTemplateAction, TemplateSendMessage, FollowEvent
, LocationSendMessage, LocationMessage, ImagemapSendMessage, MessageTemplateAction, ConfirmTemplate, DatetimePickerAction, DatetimePickerTemplateAction
, ImageMessage, ImageSendMessage, FlexSendMessage, BoxComponent, TextComponent, BubbleContainer, ButtonComponent,MessageAction
, CarouselContainer, URIAction, ImageComponent, PostbackAction, CameraAction, CameraRollAction, QuickReplyButton, QuickReply
)
import re
from PIL import Image
from io import BytesIO
import configparser
#Jedes Aktionsmodul
from contents import FollowAction, ImageAction, TextAction, PostBackAction
app = Flask(__name__)
""" ------------------------Einstellungsdatei lesen---------------------------"""
#Einstellungsdatei lesen
cfg = configparser.ConfigParser()
cfg.read('config.ini')
#SQLALCHEMY
url = cfg["SQL"]["URL"]
app.config['SQLALCHEMY_DATABASE_URI'] = url
db = SQLAlchemy(app)
#LINE-Einstellungen
chansec = cfg["LINE"]["SECRET"]
acctoken = cfg["LINE"]["TOKEN"]
line_bot_api = LineBotApi(acctoken)
handler = WebhookHandler(chansec)
superuser_securekey = cfg["SUPERUSER"]["SECUREKEY"]
superuser_securepwd = cfg["SUPERUSER"]["SECUREPASS"]
#1 ist gültig, ob die Papageienrückgabe aktiviert werden soll
Parrot_return = False
#Server-URL als Domain
base_url = cfg["SERVER"]["URL"]
"""--------------------------------------------------------------------------------------------"""
"""--------------------------------Datenbankdefinition----------------------------"""
class lineuser(db.Model):#Datenbank für allgemeine Benutzer
__tablename__ = "lineuser"
__table_args__ = {'mysql_collate': 'utf8_general_ci'}
user_id = db.Column(db.String(80), primary_key=True)
username = db.Column(db.String(255))
tel = db.Column(db.String(255))
plan = db.Column(db.String(255))
usermessage = db.Column(db.String(255))
step = db.Column(db.Integer)
status = db.Column(db.String(255))
retention = db.Column(db.String(255))
requested_at = db.Column(db.String(255))
def __init__(self, user_id, username, tel, plan, usermessage, step, status, retention, requested_at):
self.user_id = user_id
self.username = username
self.tel = tel
self.plan = plan
self.usermessage = usermessage
self.step = step
self.retention = retention
self.status = status
self.requested_at = requested_at
def __repr__(self):
return '<lineuser %r>' % self.user_id
class administrator(db.Model):#Administrator-Datenbank
__tablename__ = "administrator"
__table_args__ = {'mysql_collate': 'utf8_general_ci'}
admin_id = db.Column(db.String(80), primary_key=True)
admin_name = db.Column(db.String(255))
password = db.Column(db.String(255))
adminstatus = db.Column(db.String(255))
to_user = db.Column(db.String(255))
page_options = db.Column(db.Integer)
def __init__(self, admin_id, admin_name, password, adminstatus, to_user, page_options):
self.admin_id = admin_id
self.admin_name = admin_name
self.password = password
self.adminstatus = adminstatus
self.to_user = to_user
self.page_options = page_options
def __repr__(self):
return '<administrator %r>' % self.admin_id
"""---------------------------------------------------------------------------------------------------"""
"""--------------------------------Messaging-API-Verarbeitung----------------------------"""
#Wo kann ich Anfragen von LINE erhalten?
@app.route("/callback", methods=['POST'])
def callback():
signature = request.headers['X-Line-Signature']
body = request.get_data(as_text=True)
app.logger.info("Request body: " + body)
try:
handler.handle(body, signature)
except InvalidSignatureError:
abort(400)
return 'OK'
#Wenn Sie verfolgt werden
@handler.add(FollowEvent)
def on_follow(event):
FollowAction.Start(line_bot_api, event, db, lineuser, administrator)
#Wenn eine Nachricht kommt
@handler.add(MessageEvent, message=TextMessage)
def on_message(event):
TextAction.Start(line_bot_api, event, db, lineuser, administrator, Parrot_return)
#Wenn Sie eine Taste drücken
@handler.add(PostbackEvent)
def on_postback(event):
PostBackAction.Start(line_bot_api, event, db, lineuser, administrator)
#Wenn das Bild gesendet wird
@handler.add(MessageEvent, message=ImageMessage)
def Image_message(event):
ImageAction.Start(line_bot_api, event, db, lineuser, administrator)
"""----------------------------------------------------------------------------------------------------"""
if __name__ == "__main__":
app.run(port=????)#Geben Sie Ihre bevorzugte Portnummer an
import configparser
cfg = configparser.ConfigParser()
cfg['DEFAULT'] = {
'debug': True
}
cfg['LINE'] = {
'SECRET': "LINE geheimer Schlüssel hier"
, 'TOKEN': "Zugriffstoken hier"
}
cfg["SQL"] = {
"URL": "Beschreiben Sie hier den URI der in SQL ALCHEMY verwendeten Datenbank"
}
cfg["SUPERUSER"] = {
"SECUREKEY": "SCHLÜSSEL für den Administrator"
, "SECUREPASS": "PASS für Administratoren"
}
cfg["SERVER"] = {
"URL": "Server-URL"
}
with open('config.ini', 'w') as config_file:
cfg.write(config_file)
machen
>>python Settings.py
>>python
from server import db
db.create_all()
exit()
『TextAction.py』 Dies ist der Vorgang, wenn die folgende TEXT-Code-Eingabe von LINE empfangen wird.
TextAction.py
from linebot import (
LineBotApi, WebhookHandler
)
from linebot.exceptions import (
InvalidSignatureError
)
from linebot.models import (
MessageEvent, TextMessage, TextSendMessage, PostbackEvent, ButtonsTemplate, PostbackTemplateAction, TemplateSendMessage, FollowEvent
, LocationSendMessage, LocationMessage, ImagemapSendMessage, MessageTemplateAction, ConfirmTemplate, DatetimePickerAction, DatetimePickerTemplateAction
, ImageMessage, ImageSendMessage, FlexSendMessage, BoxComponent, TextComponent, BubbleContainer, ButtonComponent,MessageAction
, CarouselContainer, URIAction, ImageComponent, PostbackAction, CameraAction, CameraRollAction, QuickReplyButton, QuickReply
)
import re
import configparser
""" ------------------------Einstellungsdatei lesen---------------------------"""
#Einstellungsdatei lesen
cfg = configparser.ConfigParser()
cfg.read('config.ini')
superuser_securekey = cfg["SUPERUSER"]["SECUREKEY"]
superuser_securepwd = cfg["SUPERUSER"]["SECUREPASS"]
"""-----------------------------------------------------------------------------------------"""
def Start(line_bot_api, event, db, lineuser, administrator, Parrot_return):
txt = event.message.text
user_id = event.source.user_id
reply_token = event.reply_token
if Parrot_return == 1:
line_bot_api.reply_message(reply_token, TextSendMessage(text=txt))
else:
if db.session.query(administrator).filter(administrator.admin_id == user_id).count() == True and txt == "Administrator verwenden":
user = db.session.query(lineuser).filter_by(user_id=user_id).first()
if user.status == "end":
line_bot_api.push_message(to=user_id, messages=TextSendMessage(text="Verwenden Sie es als Administrator."))
user.status = "admin"
db.session.add(user)
db.session.commit()
else:
line_bot_api.reply_message(reply_token, TextSendMessage(text="Bitte warten Sie, bis Sie den normalen Gebrauch abgeschlossen haben!"))
if not db.session.query(lineuser).filter(lineuser.user_id == user_id).count():
reg = lineuser(user_id, None, None, None, None, 0, None, None, None)
db.session.add(reg)
db.session.commit()
user = db.session.query(lineuser).filter_by(user_id=user_id).first()
if txt == superuser_securekey and user.status == "end":
if not db.session.query(administrator).filter(administrator.admin_id == user_id).count():
user.status = "preadmin"
db.session.add(user)
db.session.commit()
line_bot_api.push_message(to=user_id,
messages=TextSendMessage(text="Noch ein Schritt! Bitte teilen Sie mir Ihr Passwort mit.")) #Ein Schritt vor der Administratorregistrierung
else:
line_bot_api.push_message(to=user_id,
messages=TextSendMessage(text="Sie haben bereits Administratorrechte.")) #Ich bin bereits als Administrator registriert
#############Statusprüfung und Korrekturbestätigung##########
status = user.status
if status == None:
user.status = "name"
db.session.add(user)
db.session.commit()
line_bot_api.reply_message(reply_token, TextSendMessage(text="Verrate mir bitte deinen Namen!"))
elif status == "name":
yestxt = "Ja"
notxt = "Nein"
bubble = BubbleContainer(
body=BoxComponent(
layout='horizontal', margin="xs",
contents=[
TextComponent("『%Ist es okay mit "s"?" % txt, size='md', wrap=True, type="text", margin="xs", )]),
footer=BoxComponent(
layout="horizontal", spacing="sm",
contents=[ButtonComponent(style="link", height="sm",
action=PostbackAction(label=yestxt,
data="name@@@0@@@" + txt,
display_text=yestxt)),
ButtonComponent(style="link", height="sm",
action=PostbackAction(label=notxt, data="no@@@0",
display_text=notxt))], flex=0))
image_confirm_to_message = FlexSendMessage(alt_text="Nachricht bestätigen", contents=bubble)
line_bot_api.reply_message(reply_token, image_confirm_to_message)
elif status == "tel":
yestxt = "Ja"
notxt = "Nein"
bubble = BubbleContainer(
body=BoxComponent(
layout='horizontal', margin="xs",
contents=[
TextComponent("Die Telefonnummer ist "%s ”ist alles in Ordnung?" % txt, size='md', wrap=True, type="text", margin="xs", )]),
footer=BoxComponent(
layout="horizontal", spacing="sm",
contents=[ButtonComponent(style="link", height="sm",
action=PostbackAction(label=yestxt,
data="tel@@@1@@@" + txt,
display_text=yestxt)),
ButtonComponent(style="link", height="sm",
action=PostbackAction(label=notxt, data="no@@@1",
display_text=notxt))], flex=0))
image_confirm_to_message = FlexSendMessage(alt_text="Nachricht bestätigen", contents=bubble)
line_bot_api.reply_message(reply_token, image_confirm_to_message)
elif status == "plan":
plan_ls = ["Ein Plan", "B Plan", "C Plan", "GOLD Plan"]
if txt in plan_ls:
yestxt = "Ja"
notxt = "Nein"
bubble = BubbleContainer(
body=BoxComponent(
layout='horizontal', margin="xs",
contents=[
TextComponent("Der Plan, den Sie wollen, ist "%s ”ist alles in Ordnung?" % txt, size='md', wrap=True, type="text", margin="xs", )]),
footer=BoxComponent(
layout="horizontal", spacing="sm",
contents=[ButtonComponent(style="link", height="sm",
action=PostbackAction(label=yestxt,
data="plan@@@2@@@" + txt,
display_text=yestxt)),
ButtonComponent(style="link", height="sm",
action=PostbackAction(label=notxt, data="no@@@2",
display_text=notxt))], flex=0))
image_confirm_to_message = FlexSendMessage(alt_text="Nachricht bestätigen", contents=bubble)
line_bot_api.reply_message(reply_token, image_confirm_to_message)
elif status == "message":
yestxt = "Ja"
notxt = "Nein"
bubble = BubbleContainer(
body=BoxComponent(
layout='horizontal', margin="xs",
contents=[
TextComponent("Die letzte Nachricht lautet "%s ”ist alles in Ordnung?" % txt, size='md', wrap=True, type="text", margin="xs", )]),
footer=BoxComponent(
layout="horizontal", spacing="sm",
contents=[ButtonComponent(style="link", height="sm",
action=PostbackAction(label=yestxt,
data="message@@@3@@@" + txt,
display_text=yestxt)),
ButtonComponent(style="link", height="sm",
action=PostbackAction(label=notxt, data="no@@@3",
display_text=notxt))], flex=0))
image_confirm_to_message = FlexSendMessage(alt_text="Nachricht bestätigen", contents=bubble)
line_bot_api.reply_message(reply_token, image_confirm_to_message)
elif status == "end":
if txt == "Verbindung":
yestxt = "Ja"
notxt = "Nein"
bubble = BubbleContainer(
body=BoxComponent(
layout='horizontal', margin="xs",
contents=[
TextComponent("Möchten Sie eine Verbindung zum Betreiber beantragen?", size='md', wrap=True, type="text", margin="xs", )]),
footer=BoxComponent(
layout="horizontal", spacing="sm",
contents=[ButtonComponent(style="link", height="sm",
action=PostbackAction(label=yestxt,
data="end@@@4@@@" + txt,
display_text=yestxt)),
ButtonComponent(style="link", height="sm",
action=PostbackAction(label=notxt, data="no@@@1",
display_text=notxt))], flex=0))
image_confirm_to_message = FlexSendMessage(alt_text="Bestätigung", contents=bubble)
line_bot_api.reply_message(reply_token, image_confirm_to_message)
else:
line_bot_api.reply_message(reply_token, TextSendMessage(text="Um eine Verbindung zum Betreiber herzustellen, geben Sie "Verbinden" ein."))
elif status == "preadmin" and txt != superuser_securekey:
if txt == cfg["SUPERUSER"]["SECUREPASS"]:
add_admin = administrator(user_id, None, 0, None, None, None)
db.session.add(add_admin)
db.session.commit()
user.status = "end"
db.session.add(user)
db.session.commit()
line_bot_api.reply_message(reply_token, TextSendMessage(text="Ich habe Sie als Administrator gewährt. Bitte geben Sie "Als Administrator verwenden" ein."))
else:
user.status = "end"
db.session.add(user)
db.session.commit()
line_bot_api.reply_message(reply_token, TextSendMessage(text="Bitte geben Sie von Anfang an erneut ein."))
elif status == "response":
text = txt + " --from %s"%user.username
line_bot_api.push_message(to=user.retention, messages=TextSendMessage(text=text))
elif status == "admin":
admin = db.session.query(administrator).filter_by(admin_id=user_id).first()
#Geben Sie den Administratornamen ein
if admin.admin_name == None and admin.adminstatus != "admin_name":
admin.adminstatus = "admin_name"
db.session.add(user)
db.session.commit()
line_bot_api.push_message(to=user_id, messages=TextSendMessage(text="Bitte geben Sie den Namen des Administrators ein."))
#Bestätigung der Eingabe des Administratornamens
elif admin.adminstatus == "admin_name":
qtxt = "Administrator: "%Bist du sicher, dass du "s" magst?" % txt
yestxt = "Ja"
notxt = "Nein"
bubble = BubbleContainer(
body=BoxComponent(
layout='horizontal',
margin="xs",
contents=[TextComponent(text=qtxt, size='md', wrap=True, type="text", margin="xs", )]),
footer=BoxComponent(
layout="horizontal",
spacing="sm",
contents=[ButtonComponent(style="link", height="sm",
action=PostbackAction(label=yestxt,
data="admin_name@@@1@@@" + txt,
display_text=yestxt)),
ButtonComponent(style="link", height="sm",
action=PostbackAction(label=notxt, data="no@@@1@@@no",
display_text=notxt))], flex=0))
message = FlexSendMessage(alt_text="Bitte geben Sie den Administratornamen ein.", contents=bubble)
line_bot_api.push_message(to=user_id, messages=message)
elif txt == "Trennen":
if admin.to_user != None:
line_bot_api.push_message(to=admin.to_user, messages=TextSendMessage(text="Die Verbindung zum Bediener wurde beendet."))
line_bot_api.reply_message(reply_token, TextSendMessage(text="Die bemannte Verbindung wurde getrennt."))
to_user = db.session.query(lineuser).filter_by(user_id=admin.to_user).first()
to_user.retention = None
to_user.status = "end"
db.session.add(to_user)
db.session.commit()
admin.to_user = None
db.session.add(user)
db.session.commit()
#Empfang für "normalen Gebrauch" erhalten
elif txt == "Normaler Gebrauch":
if admin.to_user != None:
line_bot_api.reply_message(reply_token,
TextSendMessage(text="Bemannte Unterstützung ist im Gange. Stellen Sie sicher, dass Sie auf "Normalbetrieb" umschalten, nachdem Sie die bemannte Unterstützung mit "Trennen" ausgeschaltet haben."))
else:
line_bot_api.reply_message(reply_token, TextSendMessage(text="Ich wechselte zum normalen Gebrauch. Für bemannten Support geben Sie bitte "Administratorgebrauch" ein."))
user.status = "end"
db.session.add(user)
db.session.commit()
to_user = db.session.query(lineuser).filter_by(user_id=user_id).first()
to_user.retention = None
to_user.status = "end"
db.session.add(to_user)
db.session.commit()
admin.to_user = None
db.session.add(user)
db.session.commit()
else:
if admin.to_user != None:
line_bot_api.push_message(to=admin.to_user, messages=TextSendMessage(text=txt))
line_bot_api.reply_message(reply_token, TextSendMessage(text="%Ich habe eine Nachricht mit s gesendet."%txt))
else:
line_bot_api.reply_message(reply_token, TextSendMessage(text="Mit niemandem verbunden."))
Entschuldigung für den sehr groben Artikel. Ich werde weiter und weiter gehen.
『PostBackAction.py』 Wenn Sie eine Tasteneingabe oder eine solche spezielle Eingabe erhalten Es ist ein Mechanismus zu verarbeiten.
PostBackAction.py
Learn more or give us feedback
from linebot import (
LineBotApi, WebhookHandler
)
from linebot.exceptions import (
InvalidSignatureError
)
from linebot.models import (
MessageEvent, TextMessage, TextSendMessage, PostbackEvent, ButtonsTemplate, PostbackTemplateAction, TemplateSendMessage, FollowEvent
, LocationSendMessage, LocationMessage, ImagemapSendMessage, MessageTemplateAction, ConfirmTemplate, DatetimePickerAction, DatetimePickerTemplateAction
, ImageMessage, ImageSendMessage, FlexSendMessage, BoxComponent, TextComponent, BubbleContainer, ButtonComponent,MessageAction
, CarouselContainer, URIAction, ImageComponent, PostbackAction, CameraAction, CameraRollAction, QuickReplyButton, QuickReply, FillerComponent,IconComponent
)
#from .ExtraCreateMessage import admin_sight_client_list
import configparser
""" ------------------------Einstellungsdatei lesen---------------------------"""
#Einstellungsdatei lesen
cfg = configparser.ConfigParser()
cfg.read('config.ini')
base_url = cfg["SERVER"]["URL"]
def create_image_container(title_name, url):
container = BubbleContainer(
body=BoxComponent(layout="vertical", spacing="sm", margin="sm", contents=[
BoxComponent(layout="vertical", contents=[
ImageComponent(url=url, size="full", aspect_mode="cover", aspect_ratio="1:1", gravity="top"),
BoxComponent(layout="vertical", contents=[
BoxComponent(layout="vertical", contents=[
TextComponent(text=title_name, size="xl", color="#ffffff", weight="bold")
]),
BoxComponent(layout="vertical", contents=[
FillerComponent(),
BoxComponent(layout="baseline", spacing="sm",contents=[
FillerComponent(),
TextComponent(text="Mach diesen Plan", offset_top="-2px", color="#ffffff",flex=0, action=MessageAction(text=title_name)),
FillerComponent(),
]),
FillerComponent(),
], border_width="1px", border_color="#ffffff", corner_radius="4px",
height="40px", spacing="sm", margin="xxl"),
], position="absolute", offset_bottom="0px", offset_start="0px", offset_end="0px",
background_color="#03303Acc", padding_all="20px", padding_top="18px"),
], padding_all="0px"),
],padding_all="0px")
)
return container
def Start(line_bot_api, event, db, lineuser, administrator):
user_id = event.source.user_id
reply_token = event.reply_token
postback_msg = event.postback.data
msg = postback_msg.split("@@@") # @@@Ändern
user = db.session.query(lineuser).filter_by(user_id=user_id).first()
step = user.step
if len(msg) == 2:
post_msg = msg[0] #Ja oder Nein
post_num = int(msg[1]) #Fragennummer
elif len(msg) == 3:
post_msg = msg[0]
post_num = int(msg[1])
data = msg[2]
if post_msg == "admin_name":
if post_num == 1:
ad_name = data
admin = db.session.query(administrator).filter_by(admin_id=user_id).first()
admin.admin_name = data
admin.adminstatus = None
db.session.add(admin)
db.session.commit()
line_bot_api.reply_message(reply_token, TextSendMessage(text="%Vielen Dank, dass Sie sich als Administrator registriert haben, Mr. s!"%ad_name))
elif step == post_num:
if post_msg == "name":
user.username = data
user.status = "tel"
user.step = step + 1
db.session.add(user)
db.session.commit()
line_bot_api.reply_message(reply_token, TextSendMessage(text="%Vielen Dank, Herr s."
"Dann geben Sie Ihre Telefonnummer ein!"
"* Dies dient zu Demonstrationszwecken. Bitte geben Sie nicht Ihre echte Telefonnummer ein! !!" % data))
elif post_msg == "tel":
user.tel = data
user.step = step + 1
user.status = "plan"
db.session.add(user)
db.session.commit()
line_bot_api.reply_message(reply_token, TextSendMessage(
text="%Vielen Dank, Herr s. Bitte wählen Sie den Plan aus, den Sie als nächstes verwenden möchten." % user.username))
plan_ls = ["Ein Plan", "B Plan", "C Plan", "GOLD Plan"]
url_ls = ["A.png ", "B.png ", "C.png ", "GOLD.png "]
bubble_container = []
for (p, url) in zip(plan_ls, url_ls):
url_ = base_url + "static/" + url
container = create_image_container(p, url_)
bubble_container.append(container)
bubble2 = CarouselContainer(contents=bubble_container)
select_messa = FlexSendMessage(alt_text="Bitte wählen Sie einen Plan.", contents=bubble2)
line_bot_api.push_message(to=user_id, messages=select_messa)
elif post_msg == "plan":
user.plan = data
user.step = step + 1
user.status = "message"
db.session.add(user)
db.session.commit()
line_bot_api.reply_message(reply_token, TextSendMessage(
text="%Vielen Dank, Herr s. Wenn Sie am Ende eine Nachricht haben, geben Sie diese bitte ein! Wenn keine, geben Sie "Keine" ein." % user.username))
elif post_msg == "message":
user.usermessage = data
user.step = step + 1
user.status = "end"
db.session.add(user)
db.session.commit()
line_bot_api.reply_message(reply_token, TextSendMessage(
text="%Vielen Dank, Herr s. Damit ist die Bewerbung abgeschlossen! * Wenn Sie eine Verbindung zum Operator herstellen möchten, geben Sie "Verbinden" ein." % user.username))
### --------Bemannte Verarbeitung---------- ####
elif post_msg == "end":
line_bot_api.reply_message(reply_token, TextSendMessage(
text="Operator(Produzent)Ich beantrage eine Verbindung zu. Bitte warte eine Weile."))
yestxt = "Verbindung"
id_ls = db.session.query(administrator.admin_id).all()
for id_ in id_ls:
try:
txt = "%Ein Betreiberanschlussantrag wurde von Herrn s erhalten. Bitte klicken Sie auf die Schaltfläche "Verbinden", um Maßnahmen zu ergreifen." %user.username
bubble = BubbleContainer(
body=BoxComponent(
layout='horizontal',
margin="xs",
contents=[TextComponent(txt, size='md', wrap=True, type="text", margin="xs", )]),
footer=BoxComponent(
layout="horizontal",
spacing="sm",
contents=[ButtonComponent(style="link", height="sm",
action=PostbackTemplateAction(label=yestxt,
data="demand@@@4@@@" + user_id,
display_text=yestxt))], flex=0))
admin_access_message = FlexSendMessage(alt_text="Ein Korrespondenzantrag ist eingegangen.", contents=bubble)
line_bot_api.push_message(to=id_[0], messages=admin_access_message)
except:
pass
elif post_msg == "demand":
to_user_id = data
to_user = db.session.query(lineuser).filter_by(user_id=to_user_id).first()
to_user.retention = user_id
to_user.status = "response"
db.session.add(to_user)
db.session.commit()
admin = db.session.query(administrator).filter_by(admin_id=user_id).first()
admin.to_user = to_user_id
db.session.add(admin)
db.session.commit()
adminuser = db.session.query(lineuser).filter_by(user_id=user_id).first()
adminuser.status = "admin"
db.session.add(adminuser)
db.session.commit()
adminname = admin.admin_name
line_bot_api.push_message(to=to_user_id, messages=TextSendMessage(text="Vom Betreiber%Verbunden mit s"%adminname))
line_bot_api.reply_message(reply_token, TextSendMessage(text="%Verbunden mit s."%to_user.username))
###----------------------------------------------------------####
else:
line_bot_api.reply_message(reply_token, TextSendMessage(text="Nochmals vielen Dank."))
else:
if user.status == "end":
line_bot_api.reply_message(reply_token, TextSendMessage(text="Ich habe es abgesagt."))
else:
line_bot_api.reply_message(reply_token, TextSendMessage(text="Es ist nicht aktuell!"))
『ImageAction.py』 Ein Code, der reagiert, wenn ein Bild gesendet wird.
ImageAction.py
from linebot import (
LineBotApi, WebhookHandler
)
from linebot.exceptions import (
InvalidSignatureError
)
from linebot.models import (
MessageEvent, TextMessage, TextSendMessage, PostbackEvent, ButtonsTemplate, PostbackTemplateAction, TemplateSendMessage, FollowEvent
, LocationSendMessage, LocationMessage, ImagemapSendMessage, MessageTemplateAction, ConfirmTemplate, DatetimePickerAction, DatetimePickerTemplateAction
, ImageMessage, ImageSendMessage, FlexSendMessage, BoxComponent, TextComponent, BubbleContainer, ButtonComponent,MessageAction
, CarouselContainer, URIAction, ImageComponent, PostbackAction, CameraAction, CameraRollAction, QuickReplyButton, QuickReply, FillerComponent,IconComponent
)
#from .ExtraCreateMessage import admin_sight_client_list
import configparser
""" ------------------------Einstellungsdatei lesen---------------------------"""
#Einstellungsdatei lesen
cfg = configparser.ConfigParser()
cfg.read('config.ini')
base_url = cfg["SERVER"]["URL"]
def create_image_container(title_name, url):
container = BubbleContainer(
body=BoxComponent(layout="vertical", spacing="sm", margin="sm", contents=[
BoxComponent(layout="vertical", contents=[
ImageComponent(url=url, size="full", aspect_mode="cover", aspect_ratio="1:1", gravity="top"),
BoxComponent(layout="vertical", contents=[
BoxComponent(layout="vertical", contents=[
TextComponent(text=title_name, size="xl", color="#ffffff", weight="bold")
]),
BoxComponent(layout="vertical", contents=[
FillerComponent(),
BoxComponent(layout="baseline", spacing="sm",contents=[
FillerComponent(),
TextComponent(text="Mach diesen Plan", offset_top="-2px", color="#ffffff",flex=0, action=MessageAction(text=title_name)),
FillerComponent(),
]),
FillerComponent(),
], border_width="1px", border_color="#ffffff", corner_radius="4px",
height="40px", spacing="sm", margin="xxl"),
], position="absolute", offset_bottom="0px", offset_start="0px", offset_end="0px",
background_color="#03303Acc", padding_all="20px", padding_top="18px"),
], padding_all="0px"),
],padding_all="0px")
)
return container
def Start(line_bot_api, event, db, lineuser, administrator):
user_id = event.source.user_id
reply_token = event.reply_token
postback_msg = event.postback.data
msg = postback_msg.split("@@@") # @@@Ändern
user = db.session.query(lineuser).filter_by(user_id=user_id).first()
step = user.step
if len(msg) == 2:
post_msg = msg[0] #Ja oder Nein
post_num = int(msg[1]) #Fragennummer
elif len(msg) == 3:
post_msg = msg[0]
post_num = int(msg[1])
data = msg[2]
if post_msg == "admin_client_list_next":
admin = db.session.query(administrator).filter_by(admin_id=user_id).first()
page_options = admin.page_options
admin.page_options = page_options + 1
db.session.add(admin)
db.session.commit()
#admin_sight_client_list(user_id)
elif post_msg == "admin_client_list_prev":
admin = db.session.query(administrator).filter_by(admin_id=user_id).first()
page_options = admin.page_options
if page_options > 0:
admin.page_options = page_options - 1
db.session.add(admin)
db.session.commit()
#admin_sight_client_list(user_id)
else:
pass
#admin_sight_client_list(user_id)
elif post_msg == "admin_name":
if post_num == 1:
ad_name = data
admin = db.session.query(administrator).filter_by(admin_id=user_id).first()
admin.admin_name = data
admin.adminstatus = None
db.session.add(admin)
db.session.commit()
line_bot_api.reply_message(reply_token, TextSendMessage(text="%Vielen Dank, dass Sie sich als Administrator registriert haben, Mr. s!"%ad_name))
elif step == post_num:
if post_msg == "name":
user.username = data
user.status = "tel"
user.step = step + 1
db.session.add(user)
db.session.commit()
line_bot_api.reply_message(reply_token, TextSendMessage(text="%Vielen Dank, Herr s."
"Dann geben Sie Ihre Telefonnummer ein!"
"* Dies dient zu Demonstrationszwecken. Bitte geben Sie nicht Ihre echte Telefonnummer ein! !!" % data))
elif post_msg == "tel":
user.tel = data
user.step = step + 1
user.status = "plan"
db.session.add(user)
db.session.commit()
line_bot_api.reply_message(reply_token, TextSendMessage(
text="%Vielen Dank, Herr s. Bitte wählen Sie den Plan aus, den Sie als nächstes verwenden möchten." % user.username))
plan_ls = ["Ein Plan", "B Plan", "C Plan", "GOLD Plan"]
url_ls = ["A.png ", "B.png ", "C.png ", "GOLD.png "]
bubble_container = []
for (p, url) in zip(plan_ls, url_ls):
url_ = base_url + "static/" + url
container = create_image_container(p, url_)
bubble_container.append(container)
bubble2 = CarouselContainer(contents=bubble_container)
select_messa = FlexSendMessage(alt_text="Bitte wählen Sie einen Plan.", contents=bubble2)
line_bot_api.push_message(to=user_id, messages=select_messa)
elif post_msg == "plan":
user.plan = data
user.step = step + 1
user.status = "message"
db.session.add(user)
db.session.commit()
line_bot_api.reply_message(reply_token, TextSendMessage(
text="%Vielen Dank, Herr s. Wenn Sie am Ende eine Nachricht haben, geben Sie diese bitte ein! Wenn keine, geben Sie "keine" ein." % user.username))
elif post_msg == "message":
user.usermessage = data
user.step = step + 1
user.status = "end"
db.session.add(user)
db.session.commit()
line_bot_api.reply_message(reply_token, TextSendMessage(
text="%Vielen Dank, Herr s. Damit ist die Bewerbung abgeschlossen! * Wenn Sie eine Verbindung zum Operator herstellen möchten, geben Sie "Verbinden" ein." % user.username))
### --------Bemannte Verarbeitung---------- ####
elif post_msg == "end":
line_bot_api.reply_message(reply_token, TextSendMessage(
text="Operator(Produzent)Ich beantrage eine Verbindung zu. Bitte warte eine Weile."))
yestxt = "Verbindung"
id_ls = db.session.query(administrator.admin_id).all()
for id_ in id_ls:
try:
txt = "%Ein Betreiberanschlussantrag wurde von Herrn s erhalten. Bitte klicken Sie auf die Schaltfläche "Verbinden", um Maßnahmen zu ergreifen." %user.username
bubble = BubbleContainer(
body=BoxComponent(
layout='horizontal',
margin="xs",
contents=[TextComponent(txt, size='md', wrap=True, type="text", margin="xs", )]),
footer=BoxComponent(
layout="horizontal",
spacing="sm",
contents=[ButtonComponent(style="link", height="sm",
action=PostbackTemplateAction(label=yestxt,
data="demand@@@4@@@" + user_id,
display_text=yestxt))], flex=0))
admin_access_message = FlexSendMessage(alt_text="Ein Korrespondenzantrag ist eingegangen.", contents=bubble)
line_bot_api.push_message(to=id_[0], messages=admin_access_message)
except:
pass
elif post_msg == "demand":
to_user_id = data
to_user = db.session.query(lineuser).filter_by(user_id=to_user_id).first()
to_user.retention = user_id
to_user.status = "response"
db.session.add(to_user)
db.session.commit()
admin = db.session.query(administrator).filter_by(admin_id=user_id).first()
admin.to_user = to_user_id
db.session.add(admin)
db.session.commit()
adminuser = db.session.query(lineuser).filter_by(user_id=user_id).first()
adminuser.status = "admin"
db.session.add(adminuser)
db.session.commit()
adminname = admin.admin_name
line_bot_api.push_message(to=to_user_id, messages=TextSendMessage(text="Vom Betreiber%Verbunden mit s"%adminname))
line_bot_api.reply_message(reply_token, TextSendMessage(text="%Verbunden mit s."%to_user.username))
###----------------------------------------------------------####
else:
line_bot_api.reply_message(reply_token, TextSendMessage(text="Nochmals vielen Dank."))
else:
if user.status == "end":
line_bot_api.reply_message(reply_token, TextSendMessage(text="Ich habe es abgesagt."))
else:
line_bot_api.reply_message(reply_token, TextSendMessage(text="Es ist nicht aktuell!"))
lange! !! !! Aber als nächstes und letztes!
『FollowAction.py』 Warum hast du nicht zuerst die folgende Aktion gezeichnet ... Nun, es ist Code, der nur beim ersten Mal ausgeführt wird, und es spielt keine Rolle, ob er vorhanden ist oder nicht.
FollowAction.py
from linebot import (
LineBotApi, WebhookHandler
)
from linebot.exceptions import (
InvalidSignatureError
)
from linebot.models import (
MessageEvent, TextMessage, TextSendMessage, PostbackEvent, ButtonsTemplate, PostbackTemplateAction, TemplateSendMessage, FollowEvent
, LocationSendMessage, LocationMessage, ImagemapSendMessage, MessageTemplateAction, ConfirmTemplate, DatetimePickerAction, DatetimePickerTemplateAction
, ImageMessage, ImageSendMessage, FlexSendMessage, BoxComponent, TextComponent, BubbleContainer, ButtonComponent,MessageAction
, CarouselContainer, URIAction, ImageComponent, PostbackAction, CameraAction, CameraRollAction, QuickReplyButton, QuickReply
)
def Start(line_bot_api, event, db, lineuser, adminstrator):
reply_token = event.reply_token
line_bot_api.reply_message(reply_token, TextSendMessage(text="Danke dafür, dass du mir folgst! Es ist ein Reservierungssystem mit einer bemannten Funktion!"))
user_id = event.source.user_id
#Benutzerinformationen registrieren.
if not db.session.query(lineuser).filter(lineuser.user_id == user_id).count():
reg = lineuser(user_id, None, None, None, None, 0, None, None, None)
db.session.add(reg)
db.session.commit()
Danke für deine harte Arbeit. Ich habe auch ein starkes Gespür dafür, meine eigenen Notizen zu schreiben, deshalb dachte ich, es wäre für jemanden hilfreich.
Ich denke, es gibt einige ineffiziente Prozesse, aber es ist ein Test, also gibt es kein Problem! Ich dachte, ich habe es mit explosiver Geschwindigkeit geschafft. Python ist das Beste! !! !!
Recommended Posts