Du må være registrert og logget inn for å kunne legge ut innlegg på freak.no
X
LOGG INN
... eller du kan registrere deg nå
Dette nettstedet er avhengig av annonseinntekter for å holde driften og videre utvikling igang. Vi liker ikke reklame heller, men alternativene er ikke mange. Vær snill å vurder å slå av annonseblokkering, eller å abonnere på en reklamefri utgave av nettstedet.
  9 7680
Hei.
Jeg bruker Pymessenger.
Prøver å kjøre:

Kode

from pymessenger.bot import Bot
buttons = []
 button = Button(title='Norsk', type='postback', payload='nor')
 buttons.append(button)
 button = Button(title='English', type='postback', payload='eng')
 buttons.append(button)
 text = 'Select'
 result = bot.send_button_message(sender, text, buttons)
Får
NameError: name 'Button' is not defined
Vis hele sitatet...
i terminalen. Jeg forstår ikke helt hvor problemet ligger, jeg følger jo eksemplene til punkt og prikke, faktisk kopiert eksemplene og redigert teksten. Jeg kan heller ikke se noe sted hvor det blir importert flere moduler i eksemplene, så jeg går ut i fra at dette skulle ha vært inkludert i pymessenger.bot....

Hva er det jeg har glemt?

Har googlet meg ihjel, men..
Sist endret av RogerThat; 4. januar 2021 kl. 23:00. Grunn: Automatisk sammenslåing med etterfølgende innlegg.
Det er jo nøyaktig som feilmeldingen sier, du har ikke noen Button-klasse. Det eneste du har importert fra pymessenger er Bot.

Button-klassen er for øvrig ikke implementert enda, ser jeg i __init__.py:

Kode

class Button(dict):
    # TODO: Decide if this should do more
    pass
Issues-siden til repoet viser også at dette prosjektet ser ut til å være lagt ganske dødt.
Sist endret av Realist1; 4. januar 2021 kl. 23:10.
Greit, da blir det nok slik at jeg heller bruker CURL-forespørsler istedenfor å bruke modulen. Tusen takk!

Allerede i gang!
def robotmessage(sender,msg,token):
Vis hele sitatet...
Ønsk meg lykke til
Sist endret av RogerThat; 4. januar 2021 kl. 23:17. Grunn: Automatisk sammenslåing med etterfølgende innlegg.
Sitat av RogerThat Vis innlegg
Allerede i gang!

Ønsk meg lykke til
Vis hele sitatet...
Lykke til!
Sånn!

Kode

def sendrobotmessage(mottaker,msg,token):
 headers = {'Content-Type': 'application/json',}
 params = (('access_token', '%s' % (token)),)
 data = '{ "messaging_type": "response", "recipient": { "id": "%s" }, "message": { "text": "%s" } }' % (sender,msg)
 response = requests.post('https://graph.facebook.com/v9.0/me/messages', headers=headers, params=params, data=data)
 return(response)

##For å kjøre dette:
#sendrobotmessage("mottaker_id","melding",access_token)
##


buttonslist = []
buttonslist.append({ 'type':'postback', 'title':'Hei', 'payload':'Hei' })
buttonslist.append({ 'type':'postback', 'title':'Heisann', 'payload':'Heisann' })

def sendrobotbutton(mottaker,text,buttons,token):
 headers = {'Content-Type': 'application/json',}
 params = (('access_token', '%s' % (token)),)
 data = '{ "recipient":{ "id":"%s" }, "message":{ "attachment":{ "type":"template", "payload":{ "template_type":"button", "text":"%s", "buttons": %s } } } }' % (mottaker,text,buttons)
 response = requests.post('https://graph.facebook.com/v2.6/me/messages', headers=headers, params=params, data=data)
 return(response)

##For å kjøre dette:
#sendrobotbutton("mottaker_id","Velg et alternativ","%s" % (buttonslist),"Access token")
##
Sist endret av RogerThat; 5. januar 2021 kl. 15:58.
Hei!
Da er jeg tilbake.
Meldinger med æ, ø og å blir erstattet med spørsmålstegn hos den som mottar Messenger-meldingen.

Jeg kan tenke for meg at det handler om decoding, så jeg la inn:

Kode

 headers = {'Content-Type': 'application/json; charset=utf-8',}
i headeren.
Men det ser ikke ut til å føre til noen endringer.

Tips?

Dette er Python 3.8, forresten.
Sist endret av RogerThat; 7. januar 2021 kl. 02:49.
Bea
Big Bad Wolf
Bea's Avatar
Hvor kommer meldingene fra? Leses de fra database?
Pass også på at du håndterer tegnsett på strings riktig i python koden din
Hei
Meldingene kommer fra en MySQL-database, men jeg opplever også samme feil ved å skrive meldingen direkte i selve funksjonen:

Kode

sendrobotmessage(id,"hei æ e bæst!",token)
Resultatet blir:
hei ? e b??st!
Sist endret av RogerThat; 7. januar 2021 kl. 13:40. Grunn: Automatisk sammenslåing med etterfølgende innlegg.
Du får et enda større problem hvis det er f. eks. hermetegn i meldinga. Prøv å kjør

Kode

sendrobotmessage(id,'"hermetegn" er skummelt',token)
Grunnen er at i linje 20 har du kombinert mottaker, text og buttons i en streng, uten å garantere at resultatet er gyldig JSON. `æøå` er ikke gyldig JSON, så derfor får du spørsmålstegn. Løsningen er å bruke et python dict:

Kode

 data = { "recipient":{ "id":mottaker }, "message":{ "attachment":{ "type":"template", "payload":{ "template_type":"button", "text":text, "buttons": buttons } } } }
Så kan du gjøre det om til JSON med json.dumps funksjonen, eller la requests gjøre det for deg ved å bruke json parameteret istedefor data:

Kode

 response = requests.post('https://graph.facebook.com/v2.6/me/messages', headers=headers, params=params, json=data)
Når du opererer med tekst med en viss struktur, enten det er JSON, SQL eller HTML, så er det generelt en tabbe å kombinere strenger og håpe at resultatet er gyldig; du vil åpne deg opp for ikke bare uskyldige bugs, men alvorlige sårbarheter.
Sitat av Don Marioso Vis innlegg
Du får et enda større problem hvis det er f. eks. hermetegn i meldinga. Prøv å kjør

Kode

sendrobotmessage(id,'"hermetegn" er skummelt',token)
Grunnen er at i linje 20 har du kombinert mottaker, text og buttons i en streng, uten å garantere at resultatet er gyldig JSON. `æøå` er ikke gyldig JSON, så derfor får du spørsmålstegn. Løsningen er å bruke et python dict:

Kode

 data = { "recipient":{ "id":mottaker }, "message":{ "attachment":{ "type":"template", "payload":{ "template_type":"button", "text":text, "buttons": buttons } } } }
Så kan du gjøre det om til JSON med json.dumps funksjonen, eller la requests gjøre det for deg ved å bruke json parameteret istedefor data:

Kode

 response = requests.post('https://graph.facebook.com/v2.6/me/messages', headers=headers, params=params, json=data)
Når du opererer med tekst med en viss struktur, enten det er JSON, SQL eller HTML, så er det generelt en tabbe å kombinere strenger og håpe at resultatet er gyldig; du vil åpne deg opp for ikke bare uskyldige bugs, men alvorlige sårbarheter.
Vis hele sitatet...
Tusen takk! Nå har jeg forstått bedre hvordan JSON parses og behandles

Dette endte opp med at koden blir:

Kode

def sendrobotmessage(sender,msg,token):
 if msg == None:
  msg = "ERROR!"
 headers = {'Content-Type': 'application/json; charset=utf-8',}
 params = (('access_token', '%s' % (token)),)
 data = { "messaging_type": "response", "recipient": { "id": sender }, "message": { "text": msg } }
  response = requests.post('https://graph.facebook.com/v9.0/me/messages', headers=headers, params=params, json=data)
return(response)
og

Kode

def sendrobotbutton(sender,buttons,text,token):
 headers = {'Content-Type': 'application/json',}
 params = (('access_token', '%s' % (token)),)
 data = { "recipient":{ "id":sender }, "message":{ "attachment":{ "type":"template", "payload":{ "template_type":"button", "text":text, "buttons": buttons } } } }
 response = requests.post('https://graph.facebook.com/v2.6/me/messages', headers=headers, params=params, json=data)
 return(response)
Sist endret av RogerThat; 7. januar 2021 kl. 19:08.