Support-Integrationen

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("&amp;", "&", $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.

War das hilfreich?