Ticket-Nachrichten abrufen
getTicketMessages()
Dies gibt alle Tickets sortiert nach dem Datum der letzten Änderung zurück. hostware verwendet diese Information, um zu prüfen, ob Tickets neue Admin-Antworten haben, die dann mit einer anderen Funktion importiert werden (TODO).
Parameter
Typ | Name | Beschreibung |
|---|---|---|
mixed | ticketId | Die ID des Tickets. Dieselbe, die Du in getTickets() angegeben hast |
Antwort
Sammlung von TicketMessageResponse()-Klassen. Jede Klasse stellt eine Ticket-Nachricht dar und enthält die folgenden Attribute:
Typ | Name | Beschreibung |
|---|---|---|
mixed | messageId | Die ID des Tickets. In der Regel Integer oder UUID. |
string | message | Die Nachricht des Tickets. Du kannst die rohe Nachricht übergeben, ein Parsen ist nicht nötig. |
Carbon | createdAt | |
Int oder Null | adminId | Die ID des hostware (!) Admins. Du musst den Admin in der Datenbank suchen. Bei anderen Integrationen werden sie per E-Mail gesucht. |
Sammlung | attachments | Sammlung von TicketMessageAttachmentResponse(). Siehe unten |
TicketMessageAttachmentResponse()
Dies enthält ein Array aller Anhänge, die an eine bestimmte Nachricht angehängt sind. Es enthält den Namen, die Größe und die URL zum Herunterladen der Datei. Normalerweise gibt jeder Ticketanbieter diese Informationen in der API-Antwort zurück.
Typ | Name | Beschreibung |
|---|---|---|
mixed | id | Die ID des Anhangs. |
string | name | Der Dateiname. |
int | Größe | Die Größe der Datei in Bytes. |
String oder Null | url | Die Download-URL der Anhangsdatei. |
Beispielcode
public function getTicketMessages(mixed $ticketId): Collection {
$response = $this->makeRequest("conversations/{$ticketId}");
$admins = $this->_getAdminMails();
$messages = [];
foreach ($response->_embedded->threads as $thread) {
if (!in_array($thread->type, ["message", "customer"])) {
continue;
}
$attachments = [];
/**
This code actually parses inline images from the message and attaches them as attachment. This is not necessary.
*/
$re = '/<img(?s).*src="(?<image_url>[A-Za-z0-9-_.:\/?=&;]*)"(?s).*alt="(?<image_name>[A-Za-z0-9-_.]*)">/m';
$str = $thread->body;
preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);
foreach ($matches as $index => $match) {
$match['image_url'] = str_replace("&", "&", $match['image_url']);
$attachments[] = new TicketMessageAttachmentResponse(
"INLINE-{$index}",
$match['image_name'],
-1,
$match['image_url'],
);
}
foreach ($thread->_embedded->attachments as $attachment) {
$attachments[] = new TicketMessageAttachmentResponse(
$attachment->id,
$attachment->fileName,
$attachment->size,
$attachment->fileUrl,
);
}
$adminId = $thread->createdBy->type === "user" ? ($admins->get($thread->createdBy->email, $admins->first())) : null;
$messages[] = new TicketMessageResponse(
$thread->id,
$thread->body,
Carbon::parse($thread->createdAt, "UTC")->setTimezone("Europe/Berlin"),
$adminId,
collect($attachments)
);
}
return collect($messages);
}Testen
Du kannst diese Funktion testen, wenn Du den Konsolenbefehl aus Tickets abrufen ausführst.
Der Konsolenbefehl ruft alle Tickets ab. Wenn sich der Parameter $lastChangedAt des Tickets von dem in der hostware-Datenbank gespeicherten Wert unterscheidet, wird getTicketMessages() ausgeführt. Du kannst lastChangedAt manipulieren, um die Ausführung auszulösen.
Die Funktion wird synchron aufgerufen, Du kannst also dump() und debug machen, wie Du möchtest.