Player Chat on Player Prefab

Options
Hi, I am pretty new to Photon (and coding), and I have been trying to implement a chat feature into my player prefabs, using a textmeshpro - I've tried both RPC and OnPhotonSerializeView, with the same result. Each player has two empty TMPro boxes above it, one for nickname (works fine) and one for displaying any player chat.

I can see messages written by players in the game, and it follows the player around fine when alone. But once another player enters, the text always shows only above the local player's head, rather than the the player who typed the message. For clarity, I am also instantiating a Player Canvas for each player (deactivated if not isMine) in which the player types a message in a TMPro input field. I'm grabbing that field and trying to synchronise that so it follows the player who sent it. This seems to work ok as the message is always the one sent by the local player, but always appears on the opposite player!

I'm currently using the following code but something is clearly wrong with my logic as when I was trying to check the player who sent the message and communicate this via an RPC instead, I was getting the same result. So I may be misunderstanding something fundamental here.. Any thoughts would be much appreciated!

The script below is attached to my instantiated player prefab:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Photon.Pun;
using System;
using TMPro;

public class ChatNewTry : MonoBehaviourPun, IPunObservable
{
    [SerializeField]
    public string myMessage;
    private GameObject chatterBox;
    private GameObject myChatBox;
    private PhotonView PV;
    private TextMeshPro tm;


    public void OnPhotonSerializeView(PhotonStream stream, PhotonMessageInfo info)
    {
        if (stream.IsWriting)
        {
            stream.SendNext(myMessage);
        }
        else if (stream.IsReading)
        {
            myMessage = (string)stream.ReceiveNext();
        }
    }

    // Start is called before the first frame update
    void Start()
    {
        PV = GetComponent<PhotonView>();
    }

    // Update is called once per frame
    void Update()
    {
        if (!PV.IsMine)
        {
            return;
        }

        if (PV.IsMine)

        {
            if (Input.GetKeyDown(KeyCode.Return))
            {
                chatterBox = GameObject.Find("MessageBox");
                string typedMessage = chatterBox.GetComponent<TextMeshProUGUI>().text;

                if (typedMessage != null)
                {
                    myChatBox = GameObject.Find("MyChatText");
                    tm = myChatBox.GetComponent<TextMeshPro>();
                    tm.text = typedMessage;
                }
                else
                {
                    return;
                }
            }      
        }
    }
}

Thanks!